-1

2 つの主要なアクティビティを備えた Android アプリがあります。アプリをゼロから開始すると、両方のアクティビティが開始され、正常に実行されます。のようなもの: A -> B. アクティビティ A は、A と B の両方に必要なすべての初期化を行います。実際のハードウェアとエミュレーターでのすべてのローカル テストでは、A は常に B が作成される前に作成 (onCreate) されます。

しかし、アプリのクラッシュ レポートに例外が表示されます。これは、B が A なしで、または A の前に開始されたことによってのみ説明できます。これは可能ですか? Android は、アプリの他のアクティビティを作成せずに内部アクティビティを作成しますか (A なしの B)? アクティビティの作成順序は保証されていますか (A から B)? エミュレーターまたは実際のハードウェアを使用して、これらのシナリオのいずれかをどのように再現しますか?

どのアクティビティが最初に開始されたかに関係なく、初期化コードを簡単に移動して動作させることができますが、変更を加える前に再現してテストする方法を学びたかったのです。ドキュメントに目を通しましたが、実際には役に立ちませんでした。

ユーザーが「再生」ボタンを押したときにタスク B を開始するコードは次のとおりです。

private void handlePlayTouch()
{
    Intent intent = new Intent(getApplicationContext(), PlayActivity.class);
    startActivity(intent);      
}
4

2 に答える 2

1

アクティビティ B を開始したら、ホーム ボタンを押してアプリケーションをバックグラウンドで実行します。空きメモリが非常に少ない場合、システムはアプリケーションを強制終了します。アプリケーションが強制終了された後にアプリケーションに切り替えようとすると、システムは最初に A を作成せずに、アプリケーションとアクティビティ B を復元しようとします。

DDMMS の [デバイス] ビューを使用してアプリケーションを手動で停止できます。赤い「プロセスの停止」ボタンがあります。アプリケーションをバックグラウンドで実行する必要があることを確認してください。

于 2012-12-12T03:48:52.327 に答える
0

あなたの場合、単一のアクティビティを使用することをお勧めします。作成時に、すべてを準備してから、必要なことを行うことができます。何かが完了したときにのみ何かが実行されるようにしたい場合は、AsyncTasks を使用します。

doInBackground => で初期化と onPostExecute を行い、その後に必要なことを行います。

onPostExecute は、doInBackground が終了したときにのみ実行されます。

http://developer.android.com/reference/android/os/AsyncTask.html

編集:

あなたの構造は Android での優れたプログラミング プラクティスを尊重していませんが、この構造を維持することが必須である場合は、少なくともアクティビティ A に "unkillable" サービスを使用する必要があります。これにより、コードが単純なアクティビティとして破壊されにくくなります。アプリがバックグラウンドに置かれるときですが、それでも破壊される可能性があります。

問題を理解するには、Android アクティビティのライフ サイクルを参照してください。

ここに画像の説明を入力

使用するサービスについては、次を参照してください。

http://developer.android.com/reference/android/app/Service.html

http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/

于 2012-12-11T16:52:49.380 に答える