バックエンドロギングモニタリングによって報告されたこの種のクラッシュのいくつかのケースが見つかりました。クラッシュは特定のUX障害とは関係がないようです。また、レポートから、自分のクラスがどのように関与しているかの兆候はありません(クラス名の兆候はありません)。典型的なクラッシュの例を次に示します。
Java.lang.NullPointerException: Attempt to read from field 'int Android.view.View.mViewFlags' on a null object reference
at Android.view.ViewGroup.dispatchDraw(ViewGroup.Java:3357)
at Android.view.View.updateDisplayListIfDirty(View.Java:14288)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ViewGroup.recreateChildDisplayList(ViewGroup.Java:3549)
at Android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.Java:3528)
at Android.view.View.updateDisplayListIfDirty(View.Java:14253)
at Android.view.View.getDisplayList(View.Java:14315)
at Android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.Java:273)
at Android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.Java:279)
at Android.view.ThreadedRenderer.draw(ThreadedRenderer.Java:318)
at Android.view.ViewRootImpl.draw(ViewRootImpl.Java:2561)
at Android.view.ViewRootImpl.performDraw(ViewRootImpl.Java:2377)
at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:2007)
at Android.view.ViewRootImpl.doTraversal(ViewRootImpl.Java:1086)
at Android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.Java:6453)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:846)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:647)
at Android.view.Choreographer.doFrame(Choreographer.Java:601)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:829)
at Android.os.Handler.handleCallback(Handler.Java:739)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:927)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:713)
Androidコードに対して記録された関連バグがあるかどうかは誰でも知っていますか?
これと同じ問題がありました。 animation
をセットアップし、onAnimationEnd
で、問題が始まったアニメーション化されたオブジェクトを削除していました。私がやったのは、asynchronousRunnable
を設定して、アニメーションが停止した後、アニメーションオブジェクトを削除する前に100ミリ秒待機することです。
以前にアニメーション化されたオブジェクトはthis._loader
private void removeLoader() {
final ContentContainer self = this; // "CustomContainer" needs to match the type of `this`
Handler h = new Handler();
h.postAtTime(new Runnable() {
@Override
public void run() {
MainActivity.instance.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
if(self._loader == null) {
// there is no loader. quit now while you still have the chance!!
return;
}
while(self._loader.getParent() != null) {
removeView(self._loader);
}
} catch(Exception e) {
Crashlytics.logException(e);
e.printStackTrace();
}
self._loader = null;
}
});
}
}, 100);
}
Cheers
私は同じ問題に直面していました。ハンドラーで解決しました。
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// remove fragment from here
}
});
問題はViewGroup
のdispatchDraw()
メソッドにあります。このメソッドは、ViewGroup
のすべての子を描画しようとします。子がnull
の場合、例外が発生します。これは、 この行 :if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) {
(mViewFlags
に注意してください)から発生する可能性が高いです。
したがって、問題は、ビューの1つがどこかで適切に初期化されていないことです。それが私ができる最善のことだと思います。
このエラーも予想外に発生し始めました。問題となっているアニメーションの断片化まで追跡されました。より具体的には、アプリケーションがLocal Maven repository for Support Libraries
rev> 26に対して構築されている場合、フラグメントトランザクションでreplace()
を使用してカスタムアニメーションを使用します。
Local Maven repository for Support Libraries
をrev 26にダウングレードします。 here を参照してください
考えられる原因:私はまったく同じ問題を抱えていました。 onDraw()呼び出し内でビューツリーを変更するコードを追加したときに発生し始めたことが判明しました。具体的には、特定の条件が満たされたときに、派生したonDraw()の子を持つビューを削除しました。これは、プラットフォームがビューツリーから削除したビューを描画しようとしているためと思われます。 onDraw()の呼び出しが終了した後にRunnableを使用して削除を送信することで問題を解決しました。
例外は一般的ですが、原因となるソースは一般的ではなく、非常に多くの動的ビューがある場合に発生しますです。 Instagramページをスクロールすると、この例外が発生する場合があります。ただし、それを詳しく見ると、ハードウェアの問題が問題になる可能性があります。したがって、問題を処理するだけです(catch)。
DispatchDrawメソッドをオーバーライドし、次のようにtry/catchブロックを追加します。
public void dispatchDraw(Canvas c)
{
try
{
super.dispatchDraw(c);
return;
}
catch(Exception exception)
{
return;
}
}