Tal*_*nel 14 android drag-and-drop view touch-event illegalstateexception
在Android 3.x上有拖放机制的问题:在做了一些拖动(比如30次拖动)之后会产生异常(参见附件链接)
https://groups.google.com/forum/#!msg/android-platform/2APvO248NNY/rKI-5dCT8XcJ (我在日志中收到与该帖子相同的内容..)
android技术人员在那里回答它是API中的错误,并说避免问题的唯一方法是调用垃圾收集器.
我做的.异常没有被抛出,但过了一段时间(比如更多30-40次拖动)android停止从某种原因调用drop事件.
我尝试通过释放所有资源/画布/绘图缓存/回收位图来"刷新"所有视图并重新创建它们并没有帮助(不再抛出异常 - 但仍有一些拖拽掉落事件后'工作)
"帮助"唯一的事情是关闭活动并重新启动它.
有人以某种方式解决了这个问题,或者有一个简单的替代方案??? (旁边实现我自己的拖放功能..)
我想得到解决方案,不会强迫我重新启动或重新创建任何不想要的东西..
这里是演示错误的示例代码(没有演示我在使用System.GC后对drop事件的问题所说的部分):
public class DragandDropExampleActivity extends Activity {
private boolean mIsBeenDragged = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView imageViewToDRag = (ImageView) findViewById(R.id.image_view_to_drag);
imageViewToDRag.setClickable(true);
imageViewToDRag.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mIsBeenDragged = true;
DragShadowBuilder shadowBuilder = new DragShadowBuilder(imageViewToDRag);
imageViewToDRag.startDrag(null, shadowBuilder, imageViewToDRag, 0);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
mIsBeenDragged = false;
}
return false;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_frame"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/image_view_to_drag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" >
</ImageView>
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
06-04 13:34:32.730: E/View(8061):
java.lang.IllegalArgumentException
at android.view.Surface.lockCanvasNative(Native Method)
at android.view.Surface.lockCanvas(Surface.java:350)
at android.view.View.startDrag(View.java:11489)
at com.show.dragandrop.DragandDropExampleActivity$1.onTouch(DragandDropExampleActivity.java:32)
at android.view.View.dispatchTouchEvent(View.java:4617)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java: 1862)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1286)
at android.app.Activity.dispatchTouchEvent(Activity.java:2315)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1835)
at android.view.View.dispatchPointerEvent(View.java:4689)
at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2415)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2077)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4126)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
使异常累积 - 只需将图像拖动到屏幕上的某个点,然后离开手指即可.正好重复30次,抛出异常.我做了这个非常简单的例子,以证明抛出的异常没有任何由我的应用程序引起的开销.
TIA
自从我问这个问题以来已经过去很多时间了。当 android ICS 发布时,这个 bug 就不再存在了。因此,自从 android ICS 以来,确实没有理由编写针对 Honeycomb 的应用程序。无论如何,只有 0.3% 的 Android 设备运行此版本的操作系统,
所以对我来说答案是 - 只是不要使用 Honeycomb!:->
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |