从TimerTask启动活动时出现异常

时间:2011-07-27 09:37:41

标签: android android-activity timertask

我正在尝试在服务中准备好一些数据后才启动活动 我正在尝试使用定时器任务,该任务不断轮询服务以获取数据读取性

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()

4 个答案:

答案 0 :(得分:3)

必须从UI线程(不是处理程序执行的线程)调用

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)