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 が必要です
洞察力に感謝