メソッドを呼び出さずにアクティビティをバックグラウンドに移動しfinish()
、これを開始した親アクティビティに戻るにはどうすればよいですか?たくさん試しましたが、解決策が見つかりませんでした。だから皆さんが助けてくれたらとてもありがたいです。
5 に答える
アクティビティがその親とは異なるタスクで実行されている場合、以下が機能します。これを実現するには、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();
新しいスレッドから何かを返す必要がある場合は、ハンドラーを使用することもできます。
AsyncTaskアプローチ:
new CacheDataTask().execute( data params );
set_result( whatever );
finish();
AsyncTaskは、新しいスレッドで何かを処理する必要があるが、UIプロセスと通信できる状況向けです。
単に
protected void minimumApp(){Intent 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
タスクを後方に移動しても、ライフサイクルイベントに応答して手動で実行しない限り、状態を維持できるとは限りません。
Activity
をIntent
使用して2番目を開始するstartActivity()
か、2番目から結果を受け取る必要がある場合は、を使用する必要がありActivity
ますstartActivityForResult()
。これにより、ユーザーがを終了Activity
して最初のに戻ったときにコールバックを受け取ることができますActivity
。
開始しActivity
て結果を取得する:http://developer.android.com/reference/android/app/Activity.html#StartingActivities