413

Android を再起動するにはどうすればよいActivityですか? 私は次のことを試しましたが、Activity単純に終了します。

public static void restartActivity(Activity act){

        Intent intent=new Intent();
        intent.setClass(act, act.getClass());
        act.startActivity(intent);
        act.finish();

}
4

21 に答える 21

658

私は次のようにテーマスイッチャーを実行しました:

Intent intent = getIntent();
finish();
startActivity(intent);

基本的に、私はfinish()最初に電話をかけており、このアクティビティが開始されたときとまったく同じインテントを使用しています。それはトリックを行うようですか?

更新: 以下の Ralf が指摘したActivity.recreate()ように、API 11 以降に進む方法です。これは、API11+ 環境にいる場合に適しています。API 10 以下を使用している場合でも、現在のバージョンを確認して上記のコード スニペットを呼び出すことができます。(ラルフの答えに賛成票を投じることを忘れないでください!)

于 2010-10-20T04:44:43.670 に答える
391

API レベル 11 (Honeycomb) 以降、アクティビティのrecreate()メソッドを呼び出すことができます( this answerのおかげです)。

recreate() メソッドは設定変更のように機能するため、該当する場合は onSaveInstanceState() および onRestoreInstanceState() メソッドも呼び出されます。

于 2012-05-04T17:11:21.403 に答える
136

SDK 11 より前では、これを行う方法は次のようになります。

public void reload() {
    Intent intent = getIntent();
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);
    startActivity(intent);
}
于 2010-08-05T23:36:53.940 に答える
118

ラルフとベンの回答を組み合わせるだけです(コメントで行われた変更を含む):

if (Build.VERSION.SDK_INT >= 11) {
    recreate();
} else {
    Intent intent = getIntent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);

    startActivity(intent);
    overridePendingTransition(0, 0);
}
于 2013-05-09T17:36:20.233 に答える
23

この解決策は私にとってはうまくいきました。

最初にアクティビティを終了してから、もう一度開始してください。

サンプルコード:

public void restartActivity(){
    Intent mIntent = getIntent();
    finish();
    startActivity(mIntent);
}
于 2014-10-02T07:19:23.353 に答える
16

これは何度も答えられましたが。

フラグメントからアクティビティを再開する場合は、次のようにします。

new Handler().post(new Runnable() {

         @Override
         public void run()
         {
            Intent intent = getActivity().getIntent();
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
            getActivity().overridePendingTransition(0, 0);
            getActivity().finish();

            getActivity().overridePendingTransition(0, 0);
            startActivity(intent);
        }
    });

それで、これは少しやり過ぎだと思っているかもしれませんか?ただし、Handler投稿により、ライフサイクルメソッドでこれを呼び出すことができます。ユーザーがアプリに戻ってくる間に状態が変化したかどうかを確認するときに、 onRestart/メソッドでこれを使用しました。onResume(何かをインストールしました)。

奇妙Handlerな場所でそれを呼び出すと、アクティビティが強制終了され、再開されません。

ご不明な点がございましたらお気軽にお問い合わせください。

乾杯、クリス

于 2012-07-25T13:49:31.053 に答える
15

これはリストされていませんが、すでに投稿されているいくつかの組み合わせです。

if (Build.VERSION.SDK_INT >= 11) {
    recreate();   
} else {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}
于 2013-07-13T00:22:48.590 に答える
10

誰かが Kotlin の回答を探している場合は、この行が必要です。

断片

startActivity(Intent.makeRestartActivityTask(activity?.intent?.component))

アクティビティ

startActivity(Intent.makeRestartActivityTask(this.intent?.component))
于 2020-09-02T08:55:31.170 に答える
4

メインのアクティビティを含め、どのアクティビティでも機能するハックな方法が 1 つあります。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

向きが変わると、通常、Android はアクティビティを再作成します (オーバーライドしない限り)。このメソッドは、Android がアクティビティを再作成しない場合に、180 度の回転に役立ちます。

于 2013-06-13T23:53:39.013 に答える
3

実際、次のコードは API レベル 5 以上で有効であるため、ターゲット API がこれより低い場合、EboMike のコードと非常によく似たものになります。

intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);
于 2011-06-20T05:29:25.180 に答える
1

最後の行を削除すると、新しいactアクティビティが作成されますが、古いインスタンスは引き続き有効です。

方向が変更されたときのように、アクティビティを再起動する必要がありますか (つまり、状態が保存されて に渡されonCreate(Bundle)ます)?

そうでない場合、考えられる回避策の 1 つは、最初のアクティビティから開始される追加のダミー アクティビティを 1 つ使用し、どのジョブがその新しいインスタンスを開始するかです。act.finish()または、新しい呼び出しが開始された後、への呼び出しを遅らせるだけです。

状態の大部分を保存する必要がある場合、特に古いコンテキスト/アクティビティを新しいインスタンスに渡すことによって、状態のすべてのプロパティを渡すことは自明ではないため、かなり深い水域に陥っています。

何をしようとしているのかを指定してください。

于 2009-09-09T09:10:11.780 に答える
-1

フラグメントから呼び出している場合は、以下のコードを実行してください。

Intent intent = getActivity().getIntent();
getActivity().finish();
startActivity(intent);
于 2015-11-04T10:37:28.323 に答える
-5

メソッド onCreate を呼び出します。例えばonCreate(null);

于 2014-12-15T08:04:01.627 に答える