2

我的主要活动有一个用自定义画布视图活动膨胀的 RelativeLayout。当用户长按屏幕时,会调用 Main Activity 内部的一个名为“touched”的方法。

   // inside the Custom View Activity

    final Handler handler = new Handler(); 
      Runnable mLongPressed = new Runnable() { 

        public void run() { 
            if (undoFlag) { undo(); }
                longPressed=true;
                ((ScorePadActivity)getContext()).touched();}
  };

在此方法中,Intent 会启动与主要活动重叠的第二个活动(不关闭它)。

  // inside the main activity

public void touched() {
     Intent intent = new Intent(ScorePadActivity.this, Chords_Activity.class);
    startActivityForResult(intent,CREATE_CHORDS); }

在此用户可以选择一系列按钮,当关闭时,结果将传输到(恢复的)主活动。

 // inside the overlapped activity

    private void trasmitResult(Bitmap resultBmp2) {

ByteArrayOutputStream stream = new ByteArrayOutputStream();
resultBmp2.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent resultIntent = new Intent();

resultIntent.putExtra("ResultChord", byteArray);
setResult(Activity.RESULT_OK, resultIntent); 
//byteArray=null;
Chords_Activity.this.finish();
}

这在大多数设备和 Android 版本(从 2.3 到 4.1)上都可以正常工作,但在某些设备上,有时打开第二个活动会返回 ConcurrentModificationException 错误。

04-29 00:57:10.400: E/AndroidRuntime(9209): FATAL EXCEPTION: main
04-29 00:57:10.400: E/AndroidRuntime(9209): java.util.ConcurrentModificationException
04-29 00:57:10.400: E/AndroidRuntime(9209):     at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at java.util.HashMap$EntryIterator.next(HashMap.java:829)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at java.util.HashMap$EntryIterator.next(HashMap.java:827)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.os.Parcel.writeMapInternal(Parcel.java:491)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.os.Parcel.writeBundle(Parcel.java:507)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at   android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:1948)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2866)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.app.ActivityThread.access$900(ActivityThread.java:123)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.os.Looper.loop(Looper.java:137)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at java.lang.reflect.Method.invokeNative(Native Method)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at java.lang.reflect.Method.invoke(Method.java:511)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-29 00:57:10.400: E/AndroidRuntime(9209):     at dalvik.system.NativeStart.main(Native Method)

我已经在 SO 内部进行了搜索,但是所有关于 ConcurrentModificationException 的帖子都与迭代器或列表数组有关,无论如何,来自 Google:“当修改集合并且集合上的现有迭代器用于修改集合时,会引发 ConcurrentModificationException也一样。”

但是感兴趣的代码部分内没有列表数组、哈希图或迭代器(不是我创建的)。

我认为问题在于主要活动,打开第二个重叠活动,进入 OnPause 状态,进行某种类型的保存过程,这与重叠活动的工作产生冲突。

我对吗?

如果是,如何同步两个活动之间的访问?

如果这个理论是错误的,问题出在哪里?

谢谢

4

0 回答 0