Fragment
データをフェッチするためにローダーに依存しているAndroidアプリケーションがあります。以下は私ののスケルトンコードですFragment
。onLoadFinished
メソッドにカスタムコードがあることを除いて、すべて同じです。
public class Events extends Fragment implements LoaderCallbacks<ArrayList<Event>> {
private Integer intWeek;
public static Events newInstance(Integer intWeek) {
Events pageFragment = new Events();
pageFragment.intWeek = intWeek;
pageFragment.setArguments(new Bundle());
return pageFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.events, null);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(this.intWeek, savedInstanceState, this);
}
public Loader<ArrayList<Event>> onCreateLoader(int intLoader, Bundle bndBundle) {
return new Scraper(getActivity().getApplicationContext());
}
public void onLoadFinished(Loader<ArrayList<Event>> ldrEvents, final ArrayList<Event> lstEvents) {
//Do something with the returned data
}
public void onLoaderReset(Loader<ArrayList<Event>> ldrEvents) {
return;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
これは、そのFragmentPagerAdapter`を取得するを使用するFragment
内部で使用されます。FragmentActivity
ViewPager
Fragment´s using a
これは正常に機能し、上記のようにページ間を移動できますFragment
。Fragment
にnewが追加されるたびViewPager
に、onCreate
メソッドが起動し、newが作成されますLoader
。
携帯電話の「ホーム」ボタンを押すと、アプリケーションが一時停止してバックグラウンドになります。私はいつでもアプリケーションを復元でき、バックグラウンドで5/10/20分経過した後でも問題なく動作します。
...しかし、アプリケーションをバックグラウンドで1時間以上長時間放置すると、起動時にアプリケーションがクラッシュし、スタックトレースがonCreate
メソッドの次の行を指します。
getLoaderManager().initLoader(this.intWeek, savedInstanceState, this);
今、私はなぜこれが起こっているのかについて非常に迷っています。Androidフレームワークは、バックグラウンドで長期間非アクティブになった後、バックグラウンドで何かを破壊しているようで、initLoader
メソッドはを作成できませんLoader
。メソッドに関するドキュメントには、initLoader
具体的に次のように記載されています。
ローダーが初期化されてアクティブになっていることを確認します。ローダーがまだ存在しない場合は、ローダーが作成され、(アクティビティ/フラグメントが現在開始されている場合)ローダーが開始されます。それ以外の場合は、最後に作成されたローダーが再利用されます。
私がここで間違っていることを誰かが指摘できるでしょうか?これは、自由に複製できないため、デバッグが非常に難しい問題のようです。それは非常にランダムです。ありがとう
logcatからのスタックトレース:
Transmitting stack trace: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mridang.stadi/com.mridang.stadi.Main}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2079)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
at android.app.ActivityThread.access$600(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4575)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.mridang.stadi.events.Events.onCreate(Events.java:73)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:834)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1805)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:200)
at com.mridang.stadi.Main.onCreate(Main.java:23)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
... 11 more