2

アプリケーションの最初のアクティビティはスプラッシュ スクリーンです。ここでは、AsyncTaskを使用してバックグラウンド スレッドで読み込みが発生している間にアニメーションが表示されます。バックグラウンドでの読み込みが完了したら、新しいアクティビティを開始したいと思います。それを行う正しい方法は何ですか?

  1. AsyncTaskクラスのonPostExecuteメソッドから直接新しいアクティビティを開始します。
  2. 新しいアクティビティを開始する前に、現在のアクティビティが表示されているかどうかを確認します。
    • 現在のアクティビティが表示されている場合は、新しいアクティビティを開始します。
    • 現在のアクティビティが表示されていない場合は、フラグ (ブール値) を使用し、onResumeメソッド中にフラグをチェックして、そこで新しいアクティビティを開始します。

私の主な関心事は次のとおりです。

アプリケーションがバックグラウンドに移行し (電話の着信、ホーム キーの押下などにより)、バックグラウンド スレッド (AsyncTask) の実行が終了し、アプリケーションがまだ実行中にonPostExecuteメソッドから新しいアクティビティが開始された場合背景: どうなるの?

  • アプリケーションが再び表示されるとすぐに、新しいアクティビティが直接開始されますか?
4

3 に答える 3

2

同様の状況に直面しました。アプリケーションがバックグラウンドになり、しばらくすると、アプリが別のアクティビティを表示するインテントを開始しました。ただし、アプリの動作は実行中の OS に依存するようになりました。

  • 4.4 より前のデバイスでは、アプリは新しいアクティビティをサイレント モードで開き、バックグラウンドのままになります。ユーザーがアプリケーションを再開すると、すでに 2 番目のアクティビティが表示されます。

  • 4.4 デバイス(4.4.2 および 4.4.4 でテスト済み) では、アプリは 2 番目のアクティビティを開きますが、3 ~ 4 秒後にアプリがフォアグラウンドにポップし、ユーザーを妨害します。

それが誰にも役立つことを願っています。アプリがフォアグラウンドに飛び出さないようにするために、2番目のケースの解決策をまだ探しています。

于 2014-09-18T10:58:25.000 に答える
1

私の経験から、私はあなたの質問に答えています

質問1

AsyncTask を使用している場合は、 で新しいアクティビティを開始する必要がありますOnPostExecute()。私の経験では、これが正しい方法です。

質問2

ホームキーを押すか、電話を受けるときはいつでも。戻るボタンを押してアプリを終了するまで、アクティビティはバックグラウンドになります (その時点でアプリは終了します)。したがって、アプリに戻ったときに、バックグラウンド プロセスが終了すると、新しいアクティビティが表示されます。それ以外の場合は、開始スプラッシュ画面が表示されます。

于 2013-01-10T09:47:00.740 に答える
0

androidのOSに依存していると思います。コンポーネントごとに組み込みの優先モデルが定義されています。

コモンズウェアによって与えられた答えを見てください。

Androidでプロセスの優先度を変更する

これにより、コンポーネントの優先度に関する簡単なアイデアが得られます。

于 2013-01-10T10:17:59.907 に答える