デバイスの向きが変わると onCreate メソッドが呼び出され続ける
-
27-10-2019 - |
質問
を持っています AsyncTask
呼ばれるもの onCreate()
私の中で Main Activity
. 。同じように Activity
方向が変わると、 AsyncTask
また呼ばれる。このような事態が起こらないようにするためにはどうすればよいですか? あるいは、このような事態が起こらないようにプログラムを再構築するにはどうすればよいですか?
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pages);
StartProcess sProcess = new StartProcess();
sProcess.execute(this);
}
}
解決
あなたは付け加えられます android:configChanges="orientation"
アクティビティでは、ContentViewをマニフェストして手動で設定するか、レイアウトをオーバーライドして変更します onconfigurationChanged アクティビティの方法。
他のヒント
チェックしてください 実行時の変更の処理
を使用してどちらかを処理できます
構成変更中にオブジェクトを保持する
構成が変更されたときにアクティビティを再起動できるようにしますが、ステートフル オブジェクトをアクティビティの新しいインスタンスに渡します。
構成変更を自分で処理する
特定の構成変更中にシステムがアクティビティを再起動しないようにしますが、構成が変更された場合はコールバックを受け取るため、必要に応じてアクティビティを手動で更新できます。
実行時の構成変更中にオブジェクトを保持するには:
オーバーライド onRetainNonConfigurationInstance() メソッド 保持したいオブジェクトを返します。
アクティビティが再度作成されたら、呼び出します getLastNonConfigurationInstance() オブジェクトを回復します。
@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
OnCreate に保持します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
if (data == null) {
data = loadMyData();
}
...
}
または、このコードをアクティビティのマニフェストに追加するだけです
android:screenOrientation="portrait"
または
android:screenOrientation="landscape"