kmshack / Android-ParallaxHeaderViewPager

DEPRECATED
Apache License 2.0
1.39k stars 336 forks source link

Inactivity crash #1

Open alirahimpour89 opened 10 years ago

alirahimpour89 commented 10 years ago

After leaving the app in the background for a long while, you will get a crash when changing tab and and the header wont scroll...

3mph4515 commented 9 years ago

Yeah, also got the same issue: Here is problem, just NPE java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kmshack.newsstand/com.kmshack.newsstand.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.kmshack.newsstand.ScrollTabHolder.adjustScroll(int)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.kmshack.newsstand.ScrollTabHolder.adjustScroll(int)' on a null object reference at com.kmshack.newsstand.MainActivity.onPageSelected(MainActivity.java:96) at com.astuetz.PagerSlidingTabStrip$PageListener.onPageSelected(PagerSlidingTabStrip.java:385) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:543) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:509) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1282) at android.view.View.dispatchRestoreInstanceState(View.java:12799) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2637) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2643) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2643) at android.view.View.restoreHierarchyState(View.java:12777) at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1744) at android.app.Activity.onRestoreInstanceState(Activity.java:944) at android.app.Activity.performRestoreInstanceState(Activity.java:916) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1138) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)             at android.app.ActivityThread.access$800(ActivityThread.java:135)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:136)             at android.app.ActivityThread.main(ActivityThread.java:5001)             at java.lang.reflect.Method.invoke(Native Method)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)

noxius commented 9 years ago

how did you fix it?

aman400 commented 9 years ago

I had same problem.. The reason of the problem is that, Android system start killing activities whenever there is shortage of memory, you need to save your data in onSavedInstanceState() and restore it whenever Activity/Fragment is recreated, either in onCreate or onRestoreInstanceState()..

The reason why your application crashed is that, mScrollTabHolders contains SparseArrayCompat of fragments which is not saved in onSavedInstanceState() so after restore it turns out to be null and your application throws a null pointer exception..

In order to fix this crash Instead of using an activity for ViewPager, I used activity with a fragment and moved viewPager to that fragment. In any case main activity gets killed, Fragment inside activity is also recreated and viewPager is regenerated so mScrollTabHolders never gets nulled...

Make sure you save your data in onSavedInstanceState() for recreating your fragment..