Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API 29 / AndroidX FragmentManager.isDestroyed() crash #485

Open
btraas opened this issue Nov 16, 2019 · 5 comments
Open

API 29 / AndroidX FragmentManager.isDestroyed() crash #485

btraas opened this issue Nov 16, 2019 · 5 comments

Comments

@btraas
Copy link

btraas commented Nov 16, 2019

Hello,

I'm getting a crash on API 29 when the androidx fragment is destroyed by android.

This SO question suggests removing the deallocation via reflection in CaldroidFragment.onDetach:

https://stackoverflow.com/questions/56925777/boolean-androidx-fragment-app-fragmentmanagerimpl-isdestroyed-on-a-null-obje

Removing the onDetach() method fixes the crash for me. Should maybe check if API < 29 before deallocating via reflection?

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManager.isDestroyed()' on a null object reference
        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4687)
        at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4705)
        at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:39)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6986)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManager.isDestroyed()' on a null object reference
        at androidx.fragment.app.Fragment.performDetach(Fragment.java:2944)
        at androidx.fragment.app.FragmentStateManager.detach(FragmentStateManager.java:469)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1331)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1398)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1476)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1541)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2858)
        at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2843)
        at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:330)
        at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:365)
        at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:233)
        at android.app.Activity.performDestroy(Activity.java:7680)
        at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1306)
        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4672)
        at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4705) 
        at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:39) 
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:6986) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445) 
@JChudasama
Copy link

JChudasama commented Nov 18, 2019

Facing same error suddenly.
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference at androidx.fragment.app.Fragment.performDetach(Fragment.java:2849) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1034) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303) at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659) at androidx.fragment.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:2644) at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:329) at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:366) at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:210) at android.app.Activity.performDestroy(Activity.java:7218) at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1249) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4370) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4401)  at android.app.ActivityThread.-wrap5(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6494)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

@KimPark89
Copy link

KimPark89 commented Nov 19, 2019

Facing same error after updating to androidx.appcompat:appcompat:1.1.0.
If I leave androidx.appcompat:appcompat:1.0.2 it works.

The problem seems to be what @btraas said.

@JChudasama
Copy link

Guys, here is the solution for the issue being face.
CaldroidX

@pavelsust
Copy link

You can get solution from here
https://github.com/vpotvin/CaldroidX

@jmimohsin
Copy link

No need to implement new SDK. Just remove onDetach() method from CaldroidFragment.java, if you have already moved code to androidx. That's it.

Check stackoverflow answer:- https://stackoverflow.com/a/56925799/2598244

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants