我是Android开发人员的初学者,正试图制作一个应用程序,其要求是在文本框中显示随机数,并继续显示一秒或任意可编程延迟的随机数,直到时间切换按钮处于“开”状态。有没有人对此有过建议,或者如果可能的话,共享部分源代码会很好。Android切换按钮
另一个建议,我会需要的是关于任何好的书开始与Android的发展与内部细节也。如果在Android上任何种类的书,作为我们对其他开发语言(例如:完全参考到Java,完整参考,以C,C++等)提前
感谢
我是Android开发人员的初学者,正试图制作一个应用程序,其要求是在文本框中显示随机数,并继续显示一秒或任意可编程延迟的随机数,直到时间切换按钮处于“开”状态。有没有人对此有过建议,或者如果可能的话,共享部分源代码会很好。Android切换按钮
另一个建议,我会需要的是关于任何好的书开始与Android的发展与内部细节也。如果在Android上任何种类的书,作为我们对其他开发语言(例如:完全参考到Java,完整参考,以C,C++等)提前
感谢
我看过一些Andoid书我强烈建议Android in Practice。读完之后,你会知道大多数人在这里提出的关于StackOverflow的问题都会从本书中获益。这是极好的价格价值,作者明确知道他们在写什么。
编辑:关于执行(更新淘汰布尔)
public final class MyActivity extends Activity implements Runnable {
private Handler uiThreadHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
// basics
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout);
// find text widget here, store in editText as also required in Chintan's solution
// get the current activity's handler, it's the UI thread
uiThreadHandler = new Handler();
// initiate the updates if that's the initial state
scheduletUpdate();
// register callbacks for button etc as required also in Chintan's solution
}
@Override
public void run() {
//update your editText field here -- this is run in the UI thread so it's safe!
scheduleUpdate();
}
private void scheduleUpdate() {
uiThreadHandler.postDelayed(this, 1000); // 1000 ms
}
// etc, some stuff missing
}
编辑:关于如何停止执行run()
方法的调度,可以使用下面的代码,这应该是显而易见的从Handler documentation(更新淘汰布尔):
uiThreadHandler.removeCallbacks(this);
我可以知道,停止这个'uiThreadHandler.postDelayed(this,1000)'的代码在哪里?'。因为它的切换按钮,因为当我的切换按钮关闭时,它必须停止更新。 –
@ChintanRathod查看我更新的答案。你对Handlers不是很熟悉,对吗? –
@ChintanRathod正如我想到的,我真的可以摆脱processUpdates标志,这只会在真正并发存在的情况下才有用 - 这里不是这种情况。感谢您激励我提供更加优雅,精益的解决方案。现在将更新我的答案。 –
作为一个初学者,我建议你去个粗糙的http://www.mybringback.com/series/android-basics/这个教程,你将能够做到你自己所要求的。他们也很容易跟踪视频教程。
使用Thread
一样,
class MyThread extends Thread
{
private volatile boolean isRunning = false;
public synchronized void requestStop() {
isRunning = true;
}
@Override
public void run() {
//place code here...
try {
while (!isRunning) {
// do your coding
handler.sendMessage(handler.obtainMessage(WhatAbout.CHANGE_TEXT.ordinal(), 0, 0));
Thread.sleep(1000 * 1); //1000 ms = 1 sec
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
现在定义下面的代码来处理多个消息。
public enum WhatAbout {
CHANGE_TEXT
}
public WhatAbout[] wa = WhatAbout.values();
然后用[处理器] [1],它可以帮助您沟通BackgroundThread
和UIThread
。 不使用处理程序,您不能更改UI
。
将以下代码放入onCreate
方法中。
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what < wa.length) {
switch (wa[msg.what])
{
case CHANGE_TEXT:
editText.setText(randomVariable);
break;
}
}
};
当您关闭开关时,请使用以下代码停止线程。
if (thread != null) {
thread .requestStop();
thread = null;
}
您的解决方案对我来说似乎相当复杂。我不认为他会需要一个线程。为什么你忽略线程中断并引入你自己的标志? –
@ClassStacker,你有任何解决方案,然后呢?你已经发布了一个答案,只是一个实用的教程建议。它被认为是答案吗?你不能发表评论? –
看到我更新的答案。 –
我会建议http://www.vogella.com,它有很好的教程。 –
@ChintanRathod我不同意。我很少在vogella.com上找到有用的文章。 –
如果你正在学习Android开发,你为什么要求代码。你想让自己学习还是从中学习? – Reno