私のアプリでこれを処理する方法は、アクティビティのonRetainCustomNonConfigurationInstance()
メソッドをオーバーライドする方法です。この方法では、画面を回転させたときに再起動してオブジェクトを保持することができます。ここで私はそれを実装する方法です。
私はWebリクエストを実行するAsyncTaskを持っています。 AsyncTaskは別のファイルにあり、実装しているコールバックのリスナーとして呼び出しアクティビティへの参照を受け取ります。だから、私のWeb要求AsyncTaskのコンストラクタは次のようなものです:
private Callbacks listener;
public WebRequest(Callbacks listener) {
this.listener = listener;
}
私はこのような私の活動にonRetainCustomNonConfigurationInstance()
を実装:
@Override
public Object onRetainCustomNonConfigurationInstance() {
if(webRequest != null) {
webRequest.detachFromActivity();
return webRequest;
} else {
return null;
}
}
を今、私の画面を回転させると、活動の再起動、および場合私のAsyncTaskが実行されている場合は、ここに参照が保存されます。この現在のアクティビティから自分のタスクを「切り離す」ことに注目してください。現在のアクティビティは破棄されます。私はリスナー(現在のアクティビティ)をnullにするだけで、私の仕事でこれを達成します。このように:を参照するので
Object retainedRequest = getLastCustomNonConfigurationInstance();
if(retainedRequest != null) {
if(retainedRequest instanceof WebRequest) {
webRequest = (WebRequest) retainedRequest;
webRequest.setListener(this);
}
}
:アクティビティを再起動すると、onCreate()
で、私はこのようなgetLastCustomNonConfigurationInstance()
を呼び出すことによって、私の実行中のスレッドを保持言及があったかどうかを確認してください今すぐ
public void detachFromActivity() {
listener = null;
}
私の実行中のスレッドは
Object
として渡されます。オブジェクトとして取得し、それが自分のAsyncTaskのインスタンスであるかどうかを確認し、それがあればそれをキャストします。
最後のステップでは、作成したばかりのNEW Activityにコールバックを「再接続」して、結果がどこに送信されるかをタスクが認識するようにします。
public void setListener(Callbacks listener) {
this.listener = listener;
}
今、私が新しく再作成された活性を有する古いスレッドへの参照を再接続することができます:私はこのように、私の仕事でそれを行うにはsetListener(this)
メソッドを使用します。あなたはAsyncTaskを使用していない可能性がありますが、概念は同じであり、実際には任意のスレッド、または任意のオブジェクトで動作するはずです。
希望すると便利です。
を見てみましょうあなたに感謝。 (保有フラグメントを使用して)は、第2の応答におけるブログの記事は、まさに私が必要なものであるように思われます。 –