0

我想建立一些条件来在 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

洞察力赞赏

4

1 回答 1

1

首先,您应该在CountDownTimer中执行此任务

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

请参阅本教程HandlerAsyncTask

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

于 2011-09-13T06:40:43.697 回答