2

StartActivity私のアプリには、次のように宣言されているものを含む、いくつかのアクティビティがあります

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

マニフェストで。サブクラスもあり、Applicationここでいくつかの初期化タスクが開始されます。初期化コードはバックグラウンド スレッドで実行されるため、StartActivity単にスプラッシュ スクリーンを表示し、バックグラウンドの初期化が完了するのを待ちます。初期化が完了するまで、制御が他のアクティビティに渡らないことが重要です。

時折、アプリが実行された後、ユーザーが HOME キーを押してバックグラウンドに送信され、他のアプリが開いている可能性があります。しばらくしてランチャーからアプリを再起動すると、アプリが最後に開いたときにアクティブだったアクティビティでアプリが正常に再開されます。これで問題ありません。

アプリが再起動されるまでに数時間の遅延があると、おかしなことが起こり始めます。プロセスが再起動されたようです - ログ出力から、 myApplication.onCreate()が呼び出され、バックグラウンドの初期化タスクが開始されたことがわかります - しかし、重大なことに、プロセスStartActivityはバイパスされ、システムは前回アクティブだったアクティビティに直接移動しようとしました。アプリが開いていました。

これは私には不可能な状況のように思えます。MAINプロセスが再起動されて (おそらく非アクティブなために以前に終了された後)、非アクティビティに直接ジャンプすることは決して可能であってはなりません。アプリが生きていて、最後に使用されたアクティビティを簡単に再開でき、アプリを再初期化する必要はありません。または、アプリが停止しており、MAINアクティビティの起動を含め、最初から再初期化する必要があります。この奇妙なゾンビ状態であってはなりません。

私の理解が間違っているのでしょうか、それとも Android がまったくおかしなことをしているのでしょうか?

関連する可能性があります: Android: クラスはいつシステムによってアンロードされますか?

4

3 に答える 3

1

アプリケーションは、「ゾンビ状態」と呼ばれる「停止」状態、非表示になっています。

再起動するときは、前回開いていた Activity の onRestart() メソッドを呼び出しています。このアクティビティにonRestart()メソッドを実装する必要があります。

そこで、アプリケーションを再初期化する必要があります。

詳細情報: http://developer.android.com/training/basics/activity-lifecycle/stopping.html

追加の推奨事項:

最初に、初期化が本当に必要かどうかを確認する必要があります。初期化プロセスが Async-Task の場合は、ここで開始するか (おそらくダイアログを使用して)、ユーザーを直接 SplashScreen/MainActivity に戻すことができます。

protected void onRestart() {
    super.onRestart();
    if (!this.getApplicationContext().getIsInitialized()
      && !(this instanceof SplashScreenActivity)) {
      Log.v(TAG, "onRestart() starting Initialization of Application");
      initialize();
    } else {
       Log.v(TAG, "onRestart() Application already initialized");
    }
 }
于 2013-01-10T22:46:55.400 に答える
0

Eclipse の設定を確認します。マニフェストでアプリが定義するものに開始アクティビティが設定されていることを確認してください。Eclipse は、特定のランチャー アクティビティをデフォルトとして設定したい場合があり、マニフェストで別の方法が指定されていても、そのアクティビティを記憶しています。

于 2013-01-10T22:42:02.573 に答える
0

アクティビティが強制終了されて再起動されたときに復元する必要がある構成を永続化するには、 onSaveInstanceStateを使用する必要があります。このバンドルを onCreate に戻すと、アプリケーションを中断したところから更新できます。

于 2013-01-10T22:38:23.027 に答える