9

4.4.2 および 4.4.3 デバイスで発生し続けるクラッシュがあります (これが API の問題かどうかはわかりませんが)。ParsePushBroadcastReceiver次のコードによって、呼び出しNullPointerExceptionの奥深くでエラーが発生する場合があります。startActivities

Intent intent = new Intent(context, SomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder.create(context)
            .addParentStack(SomeActivity.class)
            .addNextIntent(intent)
            .startActivities();

コンテキストが null かどうかをテストしてみましたが、Intent のインスタンス化でそれをキャッチできました。このアプリケーションが を使用していることにも注意してくださいParse Push。このクラッシュのクラッシュ ログ:

java.lang.RuntimeException: Unable to start receiver com.example.app.android.receiver.PushReceiver: java.lang.NullPointerException
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
       at android.app.ActivityThread.access$1800(ActivityThread.java:161)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:157)
       at android.app.ActivityThread.main(ActivityThread.java:5356)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
       at android.os.Parcel.readException(Parcel.java:1471)
       at android.os.Parcel.readException(Parcel.java:1419)
       at android.app.ActivityManagerProxy.startActivities(ActivityManagerNative.java:4494)
       at android.app.Instrumentation.execStartActivitiesAsUser(Instrumentation.java:1496)
       at android.app.Instrumentation.execStartActivities(Instrumentation.java:1458)
       at android.app.ContextImpl.startActivities(ContextImpl.java:1465)
       at android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
       at android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
       at android.support.v4.content.ContextCompatJellybean.startActivities(ContextCompatJellybean.java:26)
       at android.support.v4.content.ContextCompat.startActivities(ContextCompat.java:105)
       at android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:325)
       at android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:301)
       at com.example.app.android.receiver.PushReceiver.routePush(PushReceiver.java:59)
       at com.example.app.android.receiver.PushReceiver.onPushOpen(PushReceiver.java:35)
       at com.parse.ParsePushBroadcastReceiver.onReceive(ParsePushBroadcastReceiver.java:108)
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2552)
       at android.app.ActivityThread.access$1800(ActivityThread.java:161)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:157)
       at android.app.ActivityThread.main(ActivityThread.java:5356)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
       at dalvik.system.NativeStart.main(NativeStart.java)
4

1 に答える 1

12

これは 4.4.* デバイス固有のバグではないかと疑っているため、この問題を解決できませんでした。TaskStackBuilder別の方法として、 の使用を経由でアクティビティを作成することに置き換えましたPendingIntent.getActivities。私の場合、これは同等の機能を提供し、単純な代替品でした。おそらく、あなたもそれが便利だと思うかもしれません。

final Intent parentIntent = new Intent(context, ParentActivity.class);
parentIntent.putExtra(ParentActivity.EXTRA, extraValue);

final Intent childIntent = new Intent(context, ChildActivity.class);
childIntent.putExtra(ChildActivity.EXTRA, extraChildValue);
childIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

final Intent[] intents = new Intent [] {parentIntent, childIntent};
PendingIntent pendingIntent = PendingIntent.getActivities(context, INTENT_REQUEST_CODE, intents, PendingIntent.FLAG_ONE_SHOT);

pendingIntent.send();
于 2015-04-24T13:27:22.263 に答える