我的Android应用程序在调用系统库打开图像时崩溃的概率很低

时间:2014-11-22 02:03:02

标签: android image-processing nullpointerexception gallery

我已经向Android市场发布了一个图像编辑应用程序,用户可以使用系统库打开图像,但他们可能无法在某些手机上以低概率执行此操作,其他手机运行正常。我通过互联网多次搜索,但没有我可以在我的root手机上以较低的概率重现这个问题,但另一个无根电话没有这个问题,它总是正常运行。 错误日志是:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rainbow.jean.imageedit/com.rainbow.jean.imageedit.EditActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2438)
at android.app.ActivityThread.access$600(ActivityThread.java:171)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5453)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:857)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.view.ViewGroup.addViewInner(ViewGroup.java:3612)
at android.view.ViewGroup.addView(ViewGroup.java:3477)
at android.view.ViewGroup.addView(ViewGroup.java:3453)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:381)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:371)
at android.app.Activity.setContentView(Activity.java:2001)
at com.rainbow.jean.imageedit.EditActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:5224)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1151)
at com.lbe.security.service.core.client.b.x.callActivityOnCreate(Unknown Source)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2350)
... 11 more

我的调用图库的代码如下:

Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    activity.startActivityForResult(Intent.createChooser(intent,                           activity.getResources().getString(R.string.image_open_intent_string)), 1); 

谁能告诉我原因?我非常感激。

2 个答案:

答案 0 :(得分:0)

您是否认为这种情况正在发生,因为您获取的是网址而不是本地图片位置?比如从Dropbox或Google云端硬盘获取图片。

如果是这种情况,那么可能你可以试试这个,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}

或以其他方式处理URL,这是我尚未完成的事情:)。

答案 1 :(得分:0)

我自己解决了这个问题。这个问题是由内存设备不足造成的。这些设备内存很小,可能有很多后台进程,所以当调用系统库时,我的活动被系统杀死,之后重新创建那。我的代码处理saveInstanceState有一些bug,所以它崩溃了。希望这篇文章可以帮助别人。