0

具体的には、Activity クラスでメソッドを実行している場合、電話がスリープ状態 (CPU オフ) になると、メソッドは onPause() が呼び出される前に完了するまで実行されますか?

class MyActivity extends Activity {
    ...
    public void doSomeWork() {
        ...
        ... // <-- Device goes to sleep at this point in time
        ...
        return; // Do we get here before onPause() is called?
    }
    ...
    @Override
    public void onPause() {
        ...
    }
    ...
}

アクティビティに加えて、実行中のスレッド (おそらくアクティビティ クラスによって起動される)は、デバイスがスリープ状態になるときにコードのどの行でも中断されますか? この投稿には矛盾する回答があります:デバイスがスリープ状態になると、Activity によって起動された Thread は引き続き実行されますか?

さらに進むと、デバイスが起動したときにアクティビティの onResume() が呼び出されることを理解しています。上記の doSomeWork() または前述のスレッドが実際にスリープ中に途中で中断された場合、残りのコードは再開されますか?

洞察をお寄せいただきありがとうございます。

4

2 に答える 2

0

メイン UI スレッドで長いタスクを実行しないことは、Android の良い習慣であると考えられています。そのためdoSomeWork()、数百ミリ秒以内に終了し、reachreturnステートメントonPause()が呼び出される前に実行する必要があります。

doSomeWork()途中で中断された場合 - これが発生する唯一の可能性は、アプリケーションが恐ろしい ANR ダイアログを表示して強制終了した場合です。そのため、途中で再起動することについて心配する必要はありません。

于 2012-06-28T00:01:58.993 に答える
-1

ここで、アクティビティから移動するか、電話が表示されるか、一時停止で画面を回転させるなどのポップアップがアクティビティに表示されます。あなたが提供したリンクは、AsyncTask について語っています。AsyncTask は、バックグラウンドで実行され、一部のデータを取得した後に UI を更新するスレッドです。プロセス中にユーザーが電話を回転させると、Android はアクティビティを強制終了し、スレッドがアクティビティにリンクされている場合は再作成します。アクティビティは強制終了されませんが、リークします。

AsyncTask とアクティビティの詳細が必要な場合は、これを読むことができます 。AsyncTask は本当に概念的に欠陥がありますか、それとも何か不足していますか?

于 2012-06-27T18:09:50.437 に答える