2011-09-12 5 views
1

私はアンドロイド3.0ドラッグアンドドロップのフレームワークを使用しています。すべて正常に動作します。しかし、30回のアクションの後、アプリケーションはIllegalArgumentExceptionを引き起こします。Android 3.0 drag-n-drop IllegalArgumentExceptionが30個のアクションの後

09-12 11:17:32.282: WARN/Surface(31132): Not initializing the shared buffer client because token = -12 
09-12 11:17:32.282: ERROR/View(31132): Unable to initiate drag 
09-12 11:17:32.282: ERROR/View(31132): java.lang.IllegalArgumentException 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.Surface.lockCanvasNative(Native Method) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.Surface.lockCanvas(Surface.java:350) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.View.startDrag(View.java:11467) 
09-12 11:17:32.282: ERROR/View(31132):  at com.example.drag.drop.Dot$1.onTouch(Dot.java:70) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.View.dispatchTouchEvent(View.java:4605) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291) 
09-12 11:17:32.282: ERROR/View(31132):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1709) 
09-12 11:17:32.282: ERROR/View(31132):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1264) 
09-12 11:17:32.282: ERROR/View(31132):  at android.app.Activity.dispatchTouchEvent(Activity.java:2315) 
09-12 11:17:32.282: ERROR/View(31132):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1682) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.View.dispatchPointerEvent(View.java:4677) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2392) 
09-12 11:17:32.282: ERROR/View(31132):  at android.view.ViewRoot.handleMessage(ViewRoot.java:2054) 
09-12 11:17:32.282: ERROR/View(31132):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-12 11:17:32.282: ERROR/View(31132):  at android.os.Looper.loop(Looper.java:132) 
09-12 11:17:32.282: ERROR/View(31132):  at android.app.ActivityThread.main(ActivityThread.java:4123) 
09-12 11:17:32.282: ERROR/View(31132):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-12 11:17:32.282: ERROR/View(31132):  at java.lang.reflect.Method.invoke(Method.java:491) 
09-12 11:17:32.282: ERROR/View(31132):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
09-12 11:17:32.282: ERROR/View(31132):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
09-12 11:17:32.282: ERROR/View(31132):  at dalvik.system.NativeStart.main(Native Method) 
09-12 11:17:34.272: WARN/WindowManager(4050): Drag already in progress 
09-12 11:17:34.622: WARN/WindowManager(4050): Drag already in progress 
09-12 11:17:34.912: WARN/WindowManager(4050): Drag already in progress 
09-12 11:17:35.462: WARN/WindowManager(4050): Drag already in progress 
09-12 11:17:35.782: WARN/WindowManager(4050): Drag already in progress 
09-12 11:17:37.282: ERROR/WindowManager(4050): Unregister of nonexistent drag input channel 

あなたは例外とファイナライズの間の遅延時間は約30秒で見ることができるようにdalvinkvmは各DragEventです

09-12 11:18:06.662: WARN/Surface(31132): Surface.finalize() has work. You should have called release() (1720472, 0) 

のために呼び出した後、アプリケーションは再び正常に動作します。

同じ例外は、書籍からの2つの例示的なプロジェクトで発生:

1)http://www.manning.com/collins/。第15章の例:http://www.manning-sandbox.com/thread.jspa?messageID=117809&tstart=0

2)http://www.apress.com/9781430232223;章31

質問の例:

1)のDragEventを適切に仕上げる方法は?

または

2)私は、例えばGridViewコントロールで働いている場合Surface.finalizeを()を呼び出す方法は?

ありがとうございました。

+0

この問題は解決しませんでした。この問題は、GCがドラッグの収集を実行しないために発生します。しかし、ウィンドウが赤くなると、GCはドラッグの収集を実行します。ソフトキーボードを開いたり、ImageViewを更新したりした後、ウィンドウが再描画されます。 –

答えて

1

私はこのハニカムのバグを数日間苦労していましたが、あなたの状況が私のものに似ているかどうかはわかりませんが、それから抜け出す方法を見つけました。

私の場合、「ドラッグできない」というメッセージは、連鎖反応の最後に、ListViewをサポートしているデータアダプタのアップデートから始まりました。ユーザーがドラッグアンドドロップできるようにします)。問題は、実際には、 "Drop"で、基になるデータで何かを変更し、DataSetChangedのListViewに通知するようにアダプタに依頼することでした。
、かなり驚くほど、私のために魔法をしたにすべてのコールを交換して何
:で

lv.getAdapter().notifyDataSetChanged(); 


として定義

resetListView(lv) 

と同様に
private void resetListView(ListView lv) 
{ 
    int position = lv.getFirstVisiblePosition(); 
    int y = lv.getChildAt(0).getTop(); 
    lv.setAdapter(lv.getAdapter()); 
    lv.setSelectionFromTop(position, y); 
} 

notifyDataSetChanged()、このメソッドは、ListViewがl atest adapter-dataを作成しますが、ListView内の内部構造をリセットして、後でドラッグ&ドロップによる連鎖反応を防止して上記の例外を回避します。

ハニカムの生活は簡単ではありません。

+0

私の場合、ドラッグが開始されました。しかし、ドラッグを30回以上開始しようとすると、この例外が発生します。 –

関連する問題