在TimerTask条件之后的Android切换视图

时间:2011-09-13 06:35:43

标签: android android-asynctask timertask ui-thread

我想建立一些条件,在X时间后将用户踢出活动。

我得到了一般的想法:

  • 以毫秒为单位存储当前时间(以毫秒为单位)
  • 确定我希望用户在活动中的时长
  • 添加多长时间+存储的当前时间,以确定启动关闭该活动的日历时间(以毫秒为单位)
  • 将踢出时间与当前时间(以毫秒为单位)进行比较

对于最后一步,我发现我能找到的最好的“时间监听器”是TimerTask,实现如下:

protected void onPostExecute(Boolean success){

      kickout.schedule(new KickoutTask(), 5000);

}

class KickoutTask extends TimerTask {
    public void run() {
        Looper.prepare();

            replaceRootView(getLocalActivityManager().startActivity("myPreviousActivity", new
                Intent(this, myPreviousActivity.class)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView());

        Looper.loop();

    }
}

这是AsyncTask的最后一部分,计数和“时间监听”实际上有效,但是当用run()方法替换视图时,应用程序崩溃

"Only the original thread that created a view hierarchy can touch its views."

我理解这个概念,但我不明白在解决schedule函数中的计数后如何摆脱这个活动。此外,我需要“替换”视图,而不是仅仅为此活动使用“finish()”,因为需要进行一些刷新。

我想使用另一个简单的AsyncTask,但schedule函数需要一个TimerTask

洞察力赞赏

1 个答案:

答案 0 :(得分:1)

首先,您应该在CountDownTimer

中执行此任务

其次,您需要使用Handler来更新其他线程的视图。

请参阅HandlerAsyncTask上的本教程:

http://www.vogella.de/articles/AndroidPerformance/article.html