0

我只在服务中准备好一些数据后才尝试启动一项活动

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

4 回答 4

3

startActivityForResult必须从 UI 线程(不是处理程序执行的线程)调用。为此,请将startActivityForResult代码移动到 aRunnablerunOnUiThreadrun().

于 2011-07-27T09:41:32.760 回答
1

您不能startActivityForResult从非 UI 线程中使用。您可以使用runOnUiThread()Handler.post()

此外,您不应该真正使用单独的线程进行轮询。使用Handler'postDelayed()函数进行轮询。这样你就不会浪费整个线程进行简单的轮询。例如,请参阅:重复一个有时间延迟的任务?

于 2011-07-27T09:42:34.440 回答
0

尝试改用CountDownTimer类。您还可以查看以下答案作为示例:Android 中的 TimerTask?

于 2011-07-27T09:41:26.207 回答
0

值得研究这些帖子:

无法在未调用 Looper.prepare() 的线程内创建处理程序

无法在 AsyncTask 中为 ProgressDialog 调用 Looper.prepare() 的线程内创建处理程序

如果没有解决,你能把你的代码贴在你面临问题的地方吗!!

于 2011-07-27T09:42:54.357 回答