AndroidにActivity
をリロードするのは良い習慣ですか?
最善の方法は何でしょうか。アクティビティIntent
を持つthis.finish
そしてthis.startActivity
?
あなたは単に使うことができます
finish();
startActivity(getIntent());
それ自身の中からActivity
をリフレッシュするため。
これは設定変更から戻ってきて変更した後にアクティビティをリロードするために私がすることです。
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
これにより、アクティビティは本質的に自分自身を再描画します。
更新:これを行うより良い方法はrecreate()
メソッドを呼び出すことです。これによりアクティビティが再作成されます。
それを見たくない人のためにrecreate()の後で明滅メソッドを使うだけです
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
アプリケーションのメッセージリストを急いで更新する必要があったので、ダイアログを閉じる前にメインのUIアクティビティを更新しただけです。これを達成するためのもっと良い方法もあると確信しています。
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Androidには、アクティビティの作成と破棄を処理するプロセス管理システムが含まれているため、手動でアクティビティを再起動した場合に見られるメリットはほとんどなくなります。あなたはそれについてのより多くの情報を見ることができます アプリケーションの基礎
ただし、よい方法は、onPauseメソッドとonStopメソッドで、保持する必要のないリソースを確実に解放し、 onLowMemory を使用して削減することです。あなたの活動は最低限必要です。
私はIntentを使ってアクティビティをリロードするために与えられた以前の答えを見ました。これらは動作しますが、Activityクラス自体に指定されているrecreate()メソッドを使用しても同じことができます。
これを書く代わりに
//ダイアログボックスを閉じたときにメインアクティビティを更新する
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
これはこれを書くだけでできる。
recreate();
単に使う
this.recreate();
これはアクティビティのonCreateメソッドを引き起こすでしょう
あなたの意図と同じactivity
から始めてactivity
を閉じてください。
Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
場合によってはベストプラクティスである場合もあれば、コンテキストドリブンで実行することを選択した場合には、次の方法を使用することがアクティビティから彼女の息子に渡される最善の方法ではありません。
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
事はあなたがactivityIWishToRunから終了()するたびにあなたが生きているアクティビティに戻ることです
私は同じ問題を抱えている
import Android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
このコードは私のために働きます。 Android API 17
アクティビティでは、アクティビティを「再作成」するためにrecreate()
を呼び出すことができます(API 11+)
しばらくこれを試してみたところ、アクティビティを再起動しても予期しない結果が生じることはありませんでした。また、これは、方向が変わったときにAndroidがデフォルトで実行する動作と非常に似ていると思います。そのため、同じような状況で実行しない理由はわかりません。
あなたの活動全体をリロードするのは大変な作業です。更新しなければならないコードの一部を(kotlin)に入れるだけです。
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
そして必要に応じて "onResume()"を呼び出してください。
私はそれが良い考えではないと思います...もっときれいな方法を実装するのが良いでしょう。たとえば、アクティビティがフォームを保持している場合、クリーナーメソッドはフォーム内の各ウィジェットをクリアしてすべての一時データを削除することができます。それがあなたの望むことだと思います。アクティビティを初期状態に復元します。
私の活動のlaunchMode
をsingleTop
に設定し、finish()
を呼び出さずに、startActivity(getIntent())
を実行するだけのようなアプローチもありました。 onCreate()
とonNewIntent
の両方の新しいデータを気にするだけです。 Sushの方法では、AMAN SINGHが言ったようにアプリケーションが点滅するかもしれません。しかし、AMAN SINGHのアプローチは、たとえ彼が「瞬き」問題を解決したとしても、どういうわけか不要な新しい活動をまだ生み出すでしょう、と私は思います。
この質問には遅すぎますが、誰かが解決策を探しているなら、ここにあります。