我正在尝试在服务中准备好一些数据后才启动活动 我正在尝试使用定时器任务,该任务不断轮询服务以获取数据读取性
public class SplashTask extends TimerTask {
@Override
public void run() {
Log.i(MY_DEBUG_TAG, "Internet is accessible, Running some Spalsh screen Tasks ");
if(mBoundService.isDataReady()) {
Log.e(MY_DEBUG_TAG, "Data is ready in service..");
startActivityForResult(new Intent(SplashDroid.this, FunWithDataActivity.class), 3);
} else {
Log.e(MY_DEBUG_TAG, "Data not ready in service..");
}
Log.i(MY_DEBUG_TAG, "Spalsh Tasks fnished..");
}
}
问题是当数据准备好并且FunWithDataActivity即将启动时,我收到以下错误
07-27 14:53:40.614: ERROR/AndroidRuntime(1042): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
答案 0 :(得分:3)
startActivityForResult
。要实现此目的,请将startActivityForResult
代码移至Runnable
并使用run()
内的runOnUiThread
运行。
答案 1 :(得分:1)
您不能在非UI线程中使用startActivityForResult
。您可以使用runOnUiThread()
或Handler.post()
。
此外,您不应该使用单独的线程进行轮询。使用Handler
的{{1}}功能进行投票。这样你就不会浪费整个线程来进行简单的轮询。有关示例,请参阅:Repeat a task with a time delay?
答案 2 :(得分:0)
尝试使用CountDownTimer类。您还可以查看此答案的示例:TimerTask in Android?
答案 3 :(得分:0)