4

私は何日も狂ったように私を運転しているというエラーがあります。残念ながら、私はあなたに2つの理由でコードを示すことはできません、私の上司はそれを感謝せず、コードベースは共有するには大きすぎます。このエラーは、アクティビティが終了するたびに発生します。私がfinish()を呼び出すか、またはosがそれを破壊するので、天気があります。ここではラインで1196アクティビティの終了時にNPEがスローされるのはなぜですか?

をNPEをスローする

質問は(可能性か)何であるか、であるFragmentManagerImplで原因execPendingActionsは()スタックトレースです:

FragmentManagerImpl.execPendingActions() line: 1196 
FragmentManagerImpl$1.run() line: 375 
Handler.handleCallback(Message) line: 587 
Handler.dispatchMessage(Message) line: 92 
Looper.loop() line: 126 
ActivityThread.main(String[]) line: 3997  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 491 
ZygoteInit$MethodAndArgsCaller.run() line: 841 
ZygoteInit.main(String[]) line: 599 
NativeStart.main(String[]) line: not available [native method] 
+0

私はあなたが実際にいくつかのコードをポストする必要があると思います... – PJL

+0

私は傾ける。 「FragmentManagerImplの1196行目でNPEが投げられる原因は何だろうか」という質問を考えてみてください。 – Gallal

+0

それはすべてのアクティビティか、それともこれだけですか?少なくとも、コードが何をしているのかを記述できますか? – gregory561

答えて

1

互換ライブラリを使用してデバッグすることができます。

また、カットダウンサンプルアプリで試して再現してください。

+0

この回答は役に立ちました。これは、フラグメントのonDestroy()の1つで、ヌル参照でメソッドを呼び出していたことがわかります。残念ながら、スタックトレースはそれを明確にしていませんでした。ありがとう@PJL! – Gallal

2

活動を終えての話をするときあなたはビューからのアクティビティをfinish()にしようとしていますか? MyClass.this.finish()が正しく送信されていますか?

OSはNPEによりOSを強制終了するように見えます。フラグメントに何か問題があります。中には何かがあります。少なくともクラッシュする行を貼り付けることはできますか?

+0

行は '仕上げ();です活動の中から – Gallal

+0

フラグメントは、アプリケーション全体で20箇所以上で操作されるので、これを引き起こしている可能性のあるフラグメントで私が何をしているかを示すことは難しいです。 – Gallal

+0

アクティビティの仕上がりを確認し、断片からアクティビティを終了しているかどうかを確認し、正しく膨張されているかどうかを確認してください。 –

2

破棄される前に、保留中のトランザクションのリストをクリアしないバグがフラグメントマネージャで発生している可能性があります。これは、FragmentTransaction.commitAllowingStateLoss()を使用して、状態が保存された後にトランザクションをコミットした場合に発生します。アクティビティでこのコードを使用して回避することができます。

@Override void onDestroy() { 
    getFragmentManager().executePendingTransactions(); 
    super.onDestroy(); 
} 
+1

残念ながら、私はこれを試しましたが、うまくいきません。ドキュメンテーションによると、実行される保留中のトランザクションがないことを意味するfalseを返します。 – Gallal

0

にNullPointerExceptionが活動のハンドラは、FragmentManagerから設定されていないことに起因するので、クラッシュを防ぎます「ソリューション」は以下の通りです:

public void onDestroy(){ 
     super.onDestroy(); 
     try { 
      Field mActivityField = getFragmentManager().getClass().getDeclaredField("mActivity"); 
      mActivityField.setAccessible(true); 
      mActivityField.set(getFragmentManager(), this); 

      Field mPendingActionsField = getFragmentManager().getClass().getDeclaredField("mPendingActions"); 
      mPendingActionsField.setAccessible(true); 
      mPendingActionsField.set(getFragmentManager(), null); 


      Field f = Activity.class.getDeclaredField("mHandler"); 
      f.setAccessible(true); 
      Handler handler = (Handler) f.get(this); 
      handler.close(); 
     } catch (Throwable e) { 

     } 
} 
関連する問題