finish()
メソッドを呼び出さずにアクティビティをバックグラウンドに移動させ、これを開始した親アクティビティに戻るにはどうすればよいですか?たくさん試しましたが、解決策が見つかりませんでした。だから皆さんが助けてくれたらとてもありがたいです。
以下は、アクティビティがその親とは異なるタスクで実行されている場合に機能します。これを実現するには、 http://developer.Android.com/guide/topics/manifest/activity-element.html#lmode を参照してください。
public void onBackPressed () {
moveTaskToBack (true);
}
現在のタスクは非表示になりますが、その状態は変更されないままであり、再度アクティブ化すると、離れたときと同じように表示されます。
バックグラウンドでキャッシュ/保存/処理するデータがある場合は、 AsyncTask または Thread を使用できます。
親にキャッシュ/移行する準備ができたら、子のActivityメソッドの1つで次のようなことを行います(startActivityForResult()で子を開始したと仮定します)
スレッドアプローチ:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// PUT YOUR CACHING CODE HERE
}
});
t1.start();
setResult( whatever );
finish();
新しいスレッドから何かを返す必要がある場合は、 Handler を使用することもできます。
AsyncTaskアプローチ:
new CacheDataTask().execute( data params );
set_result( whatever );
finish();
AsyncTaskは、新しいスレッドで何かを処理する必要があるが、UIプロセスと通信できる状況向けです。
単に
protected void minimumApp(){インテントstartMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); }
試してください:
Intent toNextActivity = new Intent(CurrentActivity.this,
NextActivity.class);
CurrentActivity.startActivity(toNextActivity);
この方法を使用すると、CurrentActivityのメソッドonPause()が呼び出され、CurrentActivityに静的変数(MediaPlayerオブジェクトなど)がある場合は、引き続き存在します(または再生中の場合は再生されます)。
私は自分のアプリケーションでそれを使用していますが、サービスでそれを行うためのより良い方法を見つけました。
これがお役に立てば幸いです。
タスクを後方に移動しても、Activity
ライフサイクルイベントに応答して手動で行わない限り、状態を維持することは保証されません。
startActivity()
を使用してActivity
経由で2番目のIntent
を開始するか、2番目のActivity
から結果を受け取る必要がある場合は、startActivityForResult()
。これにより、ユーザーがActivity
を終了し、最初のActivity
に戻ったときに、コールバックを受け取ることができます。
Activity
を開始して結果を取得する: http://developer.Android.com/reference/Android/app/Activity.html#StartingActivities