2

サポートしている Android アプリケーションがあり、アクティビティの 1 つを何度も呼び出した後、インテントからエクストラを取得しようとすると、stackoverflowerror がスローされます。クラッシュ時のスタック トレースを次に示します。アクティビティを少なくとも 4 回呼び出した後、次回インテントからエクストラを取得するときに StackOverflowError をスローする理由についてのアイデアはありますか?

インテントを構築するために使用されるコードは、String、String、boolean、Object です。

Intent videoIntent = new Intent(this, VideoPlayer.class);
videoIntent.putExtra(AppNames.EXTRA_VIDEO_URI, uri);
videoIntent.putExtra(AppNames.EXTRA_VIDEO_TITLE, channel.getName());
videoIntent.putExtra(AppNames.EXTRA_VIDEO_MODE_RESUME, false);
videoIntent.putExtra(AppNames.EXTRA_MCD_CHANNEL, channel);
startActivity(videoIntent);  

StackOverflowError をスローしているコードは次のとおりです。
uri = getIntent().getStringExtra(AppNames.EXTRA_VIDEO_URI);

I/dalvikvm( 1719): Stack overflow, expanding (0x41048200 to 0x41048000)  
I/dalvikvm( 1719): Shrank stack (to 0x41048200, curFrame is 0x4104834c)  
D/AndroidRuntime( 1719): Shutting down VM  
W/dalvikvm( 1719): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)  
E/AndroidRuntime( 1719): Uncaught handler: thread main exiting due to uncaught exception  
E/AndroidRuntime( 1719): java.lang.StackOverflowError  
E/AndroidRuntime( 1719):  at java.lang.reflect.ReflectionAccessImpl.clone(ReflectionAccessImpl.java:38)  
E/AndroidRuntime( 1719):  at java.lang.Class.getDeclaredMethod(Class.java:765)  
E/AndroidRuntime( 1719):  at java.io.ObjectStreamClass.getPrivateReadObjectMethod(ObjectStreamClass.java:789)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1525)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1296)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:545)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1549)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.util.ArrayList.readObject(ArrayList.java:702)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invokeNative(Native Method)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invoke(Method.java:521)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1534)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1296)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:545)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1549)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.util.ArrayList.readObject(ArrayList.java:702)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invokeNative(Native Method)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invoke(Method.java:521)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1534)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1296)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:545)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1549)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.util.ArrayList.readObject(ArrayList.java:702)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invokeNative(Native Method)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invoke(Method.java:521)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1534)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNew  
D/dalvikvm( 1719): GC freed 6315 objects / 501704 bytes in 154ms  
I/Process (   56): Sending signal. PID: 1719 SIG: 3  
I/dalvikvm( 1719): threadid=7: reacting to signal 3  
4

2 に答える 2

1

私が知る限りgetIntent().getStringExtra()、URI ではなく文字列を返します。

于 2010-09-28T12:20:00.407 に答える
1

オブジェクトが複雑すぎます。オブジェクトをシリアル化するときは、そのコンテンツをシリアル化する必要があります。他のオブジェクトが含まれている場合、これらもデシリアライズする必要があります。

于 2010-01-25T17:12:18.670 に答える