web-dev-qa-db-ja.com

終了せずにアクティビティをバックグラウンドに送信する

finish()メソッドを呼び出さずにアクティビティをバックグラウンドに移動させ、これを開始した親アクティビティに戻るにはどうすればよいですか?たくさん試しましたが、解決策が見つかりませんでした。だから皆さんが助けてくれたらとてもありがたいです。

16
1HaKr

以下は、アクティビティがその親とは異なるタスクで実行されている場合に機能します。これを実現するには、 http://developer.Android.com/guide/topics/manifest/activity-element.html#lmode を参照してください。

public void onBackPressed () {
    moveTaskToBack (true);
}

現在のタスクは非表示になりますが、その状態は変更されないままであり、再度アクティブ化すると、離れたときと同じように表示されます。

41
mhsmith

バックグラウンドでキャッシュ/保存/処理するデータがある場合は、 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プロセスと通信できる状況向けです。

2
stormin986

単に

protected void minimumApp(){インテントstartMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); }

1
Raj008

試してください:

 Intent toNextActivity = new Intent(CurrentActivity.this,
                                     NextActivity.class);
 CurrentActivity.startActivity(toNextActivity);

この方法を使用すると、CurrentActivityのメソッドonPause()が呼び出され、CurrentActivityに静的変数(MediaPlayerオブジェクトなど)がある場合は、引き続き存在します(または再生中の場合は再生されます)。

私は自分のアプリケーションでそれを使用していますが、サービスでそれを行うためのより良い方法を見つけました。

これがお役に立てば幸いです。

0
Ungureanu Liviu

タスクを後方に移動しても、Activityライフサイクルイベントに応答して手動で行わない限り、状態を維持することは保証されません。

startActivity()を使用してActivity経由で2番目のIntentを開始するか、2番目のActivityから結果を受け取る必要がある場合は、startActivityForResult()。これにより、ユーザーがActivityを終了し、最初のActivityに戻ったときに、コールバックを受け取ることができます。

Activityを開始して結果を取得する: http://developer.Android.com/reference/Android/app/Activity.html#StartingActivities

0
Jonathan