这是我的问题。我正在编写一个Android应用程序,它需要显示它正在运行的活动的时间。因此,我创建了一个从活动中调用的新线程。但是,当我在模拟器中启动应用程序时,似乎从未加载Activity。也许你们可以帮助我。以下是相关代码:
public class ActivityStartTracker extends ActivityBasic {
TimerThread timer;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
timer = new TimerThread();
}
protected void onResume() {
super.onResume();
registerReceiver(broadcastReceiver, new IntentFilter(
ServiceLocator.BROADCAST_ACTION));
timer.run();
}
protected void onPause() {
super.onPause();
unregisterReceiver(broadcastReceiver);
if (timer.isRunning()) {
timer.interrupt();
}
}
class TimerThread extends Thread {
boolean isRunning = false;
public TimerThread() {
}
@Override
public void run() {
int seconds = 0;
isRunning = true;
while (isRunning) {
try {
Log.d(TAG, "Timer is running for : " + seconds);
seconds++;
Thread.sleep(1000);
} catch (InterruptedException e) {
isRunning = false;
}
}
}
public boolean isRunning() {
return isRunning;
}
}
}
就像我说的,这些是相关的代码片段。 问题是,如果我运行它,活动保持黑色 - 我只是得到带有应用程序名称的标题,这就是全部。通过日志记录,我可以确认线程正在运行,但没有显示任何其他内容。
你能帮帮我吗,我对android很新 非常感谢 - 已经提前了。
答案 0 :(得分:1)
调用timer#run()就可以了,调用UI线程中的#run()方法。您需要通过调用#start()来启动您的线程 - 然后新线程将执行您期望的操作。
进一步:不要两次调用Thread#start(),它实际上不会重新启动线程,只会使应用程序崩溃。如果您打算从onResume启动Thread,则需要在那里分配一个新线程。
不过,请考虑使用AsyncTask。BR, 延
答案 1 :(得分:0)
请记住,可以更新UI的唯一线程是UIThread
。
因此,如果您想在另一个线程中修改UI,则应采用以下方法:runOnUIThread()
,但是当你有一个更新UI的线程时,最好的方法是使用AsyncTask
;参考this