0

我有一个我开发的 Android 应用程序,它是从一个成功的 ios 应用程序创建的,该应用程序已发布并且运行良好。在一台设备上它可以正常工作,没有错误并且不会崩溃。然而,在另一台设备(更新、更新版本的 Android、更快的处理器)上它会崩溃。这是崩溃时的内存错误。

在此处输入图像描述

该应用程序旨在拍摄一张照片,然后将该照片用作画布的背景,然后拍摄屏幕截图。我可以完成这个过程一次,但是如果我重复这个过程并拍摄另一张照片,应用程序会在相机 API 退出时第二次崩溃。并显示这些错误。该应用程序是在 Eclipse 中使用 Phonegap 和 Jquery mobile 开发的。我不确定我应该发布我的代码的哪些部分来解决这个问题,但请随时询问您是否觉得其中一些可能相关。

非常感谢任何帮助。

4

3 回答 3

0

好的,如果您查看我关于 PhoneGap Android 应用程序内存不足的帖子:

http://simonmacdonald.blogspot.ca/2012/07/change-to-camera-code-in-phonegap-190.html

使用 camera.getPicture() 命令时,您可能会发现一些提示。除此之外,我目前正在通过将所有东西都放在内部而不是触发相机意图来解决其中的一些相机问题。

于 2012-09-25T13:12:10.800 回答
0

你可以做这样的伎俩......将图片设置为背景使用......

   public void setbg(){
 String pathName = Environment.getExternalStorageState() + "scm_pic.jpg";
 Resources res = getResources();
 Bitmap bitmap = BitmapFactory.decodeFile(pathName);
 BitmapDrawable bd = new BitmapDrawable(res, bitmap);
 View view = findViewById(R.id.container);
 view.setBackgroundDrawable(bd);
} 

然后当您不需要这张图片或想要@Override onPause 方法或切换另一个活动时使用......

private void unbindDrawables(View view) {
 if (view.getBackground() != null) {
 view.getBackground().setCallback(null);
 }
 if (view instanceof ViewGroup) {
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
     unbindDrawables(((ViewGroup) view).getChildAt(i));
     }
 ((ViewGroup) view).removeAllViews();
  }
}

要在@Override 中使用它,例如...

unbindDrawables(findViewById(R.id.container));
System.gc();
于 2012-09-25T13:16:59.997 回答
0

如果你使用相机意味着目的地类型必须在 FILE_URL 在android中。因为 DATA_URI 给出了 base64 字符串,所以它有时会给出内存不足的错误。首先,您从相机获取 URL,然后使用文件系统概念转换 base64 格式...

于 2014-04-02T07:20:51.217 回答