【问题标题】:Starting an intent in onPictureTaken causes Eclipse to crash在 onPictureTaken 中启动意图会导致 Eclipse 崩溃
【发布时间】:2013-12-24 04:11:11
【问题描述】:

我正在尝试制作一个 android 应用程序,在其中我用相机拍摄图像并将该图像发送到另一个要编辑的活动等等。我尝试通过这样的意图发送一个字节数组来做到这一点:

private PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        Intent intent = new Intent(MainActivity.this, PhotoEditor.class);
        intent.putExtra("key", data);
        startActivity(intent);
    }
};

我正在使用我的 Lenovo IdeaTab a3000-F 进行测试。大约三分之一的时间运行没有问题。其余时间我的程序冻结(它不会关闭或弹出窗口 - 它只是停止执行任何操作),然后 Eclipse 在控制台 DDMS 上给出此消息:

[ddms] Can't bind to local 8700 for debugger

然后,如果我尝试在平板电脑上运行任何应用程序,它会在 Android 控制台上显示以下消息:

   [] Failed to install *.apk on device *:
   [] timeout Launch canceled!

我为解决这个问题所做的工作是:

  1. 关闭 Eclipse 并断开我的平板电脑
  2. 在任务管理器中结束 adb.exe 的任务
  3. 在命令提示符下输入adb start-server
  4. 重新打开 Eclipse

--此时 eclipse 错误消失了,但如果我尝试使用它,我的平板电脑将无法识别--

  1. 重新打开和关闭我的平板电脑,然后重新连接

完成此操作后,我可以再次在平板电脑上运行应用程序,但如果我运行应用程序的那部分,Eclipse 将再次崩溃。

所以我的问题是:为什么这会导致 Eclipse 出现错误,我该如何防止它们发生?此外,如果有另一种完全不涉及字节数组的方法来做到这一点,那就太好了,但我仍在寻找导致问题的原因。

以下是一些可能有帮助的附加信息:

  • 数据数组的长度约为 100000,但是,如果不是将数据数组传递给意图,而是传递一个更大的新字节数组,我要么没有收到错误,要么我得到的只是巨大的另一个错误导致我的程序崩溃但不是 Eclipse
  • 我今天重新下载了android adt,所以我有那个版本的
  • 其他 Activity 不会对 Intent 上的数据做任何事情,甚至不会检索它
  • 我有平板电脑的驱动程序,USB 调试已启用,它通过 MTP 连接,并且我的项目已将 debuggable 设置为 true
  • 程序冻结后,如果我关闭它,我将无法再次打开它,如果我尝试卸载它,则没有任何反应

【问题讨论】:

    标签: android eclipse android-intent android-camera


    【解决方案1】:

    Intents 旨在携带消息或小数据,通过 Intent 传递 byte[] 会导致错误。从 PhotoEditor 类的 onCreate() 中的 Intent 获取字节数组可能会导致应用程序冻结。 在 onPictureTaken() 中,您可以将 byteArray 写入文件,然后通过 intent 传递此文件的 uri。在第二个活动中,即 PhotoEditor 使用此 uri 加载图像。因此,您可以避免使用 intent 传递字节数组。 希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      相关资源
      最近更新 更多