0

タブレット用の Android アプリ (ICS) を作成しています。ユーザーは、ボタンを押すだけで、アクティビティ A からアクティビティ B、アクティビティ C に移動します。アクティビティ C から 10 秒後にアクティビティ A に戻りたい。アクティビティ C をロックせずに 10 まで数える方法はありますか?

asyncTask で成功しましたが、onPostExecute() で startActivity(A) を実行すると、asyncTask が UI を混乱させてはならないというガイドラインに違反しているように感じます。get() を試しましたが、10 秒が経過するのを待っている間、アクティビティ C がロックされます。

前もって感謝します!

4

3 に答える 3

1

Viewアクティビティにインスタンスがあると仮定すると、 View.postDelayed()を使用して、特定の遅延でランナブルを投稿できます。このランナブルでは、Activity.finish()を呼び出すことができます。View.removeCallbacks()を使用してコールバックを削除しonDestroy()、ユーザーがアクティビティから戻った後にコールバックが呼び出されないようにする必要があります。

時間をカウントするためだけに使用するのはやり過ぎです (実際に便利なバックグラウンド作業を行うAsyncTaskために使用したい場合を除きます)。およびクラスAsyncTaskは、指定された遅延の後に UI スレッドでコードを実行するために必要なすべてを提供します。上記のメソッドは、機能を公開する便利なメソッドにすぎません。LooperHandlerViewHandler

于 2012-11-08T15:51:33.687 に答える
0

説明どおり、AsyncTaskの使用は正常に機能します。Androidドキュメントから:

onPostExecute(Result)、バックグラウンド計算が終了した後にUIスレッドで呼び出されます。

UIスレッドで呼び出されるので、問題ないはずです。

ドキュメンテーション

于 2012-11-08T15:45:58.477 に答える
0

そのためにアラームマネージャを使用できます。アクティビティ a から 10 秒間ブロードキャストを送信するように設定し、アクティビティ ab と c のベース アクティビティを実装してブロードキャストを受信します。ブロードキャストを受信した後、現在のアクティビティを終了し、新しいフラグでアクティビティ a を開始します。現在のインスタンスがアクティビティ a である場合は、アクティビティ a を開始しない場合は無視します。そんな感じ。

アイドル部分に関しては、アクティビティに入ったときなど、すべてのアクションでアラームマネージャーを更新できます。

この実装の利点は、コンテキスト リーク、アクティビティ間でのタイマーの永続化などについて心配する必要がないということです。そして、すでにあるものを利用することができます。ただし、サービスの使用を検討することもできます。

そうでない場合は、共有設定ストアを使用してタイムアウトし、アクションを確認または更新することができます..より単純な実装。

幸運を。

于 2012-11-08T15:50:24.123 に答える