【问题标题】:Android app restarts during gallery intent在图库意图期间 Android 应用重新启动
【发布时间】:2016-11-01 09:22:33
【问题描述】:

我的应用启动图库以选择照片。与此同时,我的应用程序被操作系统杀死,因此当我选择图像时,我的应用程序需要重新启动。

注意:这是一个暂时性问题。它通常工作得很好。

当它失败时,日志中没有任何内容表明发生了任何问题。

画廊以通常的方式通过Intent.ACTION_GET_CONTENT启动。

为什么我的应用程序被终止?我只能假设这是内存问题(由 Gallery 应用程序引起?),除了:

  • 小图像也会出现这种情况。

  • 当它成功运行时,我的应用程序在处理 图片。

  • 我正在使用android:largeHeap="true"activityManager.getMemoryClass() = 256MB。

  • 连接调试器时,该问题更常发生。

  • 一张照片,即使未压缩,也可能不超过 30MB。在启动图库时,我的系统有 199MB 可用空间。

即使应用程序重新启动,onActivityResult 方法仍然会被调用,所以我仍然可以继续上传,但这会导致过程非常缓慢,用户体验也很糟糕。

(在三星 Galaxy S3 上运行 Jellybean)

【问题讨论】:

  • my app needs to start up all over again。这有什么可怕的?你是在使用 onCreate() 的实例状态参数吗?
  • 我的应用程序每次启动时都需要通过 Internet 获取数据 - 因此,在图像上传期间重新启动会使一切比应有的速度慢 10 秒左右。在我看来,这是不可接受的用户体验。
  • 当您旋转设备时?你怎么处理?我想你不会再全部下载吗? Are you using the instance state parameter of onCreate()?你为什么不回答?
  • 旋转设备不会触发onCreate() 甚至onRestoreInstanceState()。是的,我正在使用实例状态参数,这就是我能够在重新启动后恢复上传的方式。我无法序列化整个应用程序状态,因为我正在运行一个正在发出网络请求的 web 视图。

标签: android android-intent android-gallery


【解决方案1】:

试试这个兄弟, Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT);// startActivityForResult(Intent.createChooser(intent, "Select Picture"),123);

【讨论】:

  • 这与我已有的有何不同?我尝试过使用选择器,但仍然遇到同样的问题。
【解决方案2】:

试试这个

Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                intent.setType("image/*");
                startActivityForResult(
                        Intent.createChooser(intent, "Select File"),
                        SELECT_FILE);

【讨论】:

  • 我尝试了 ACTION_PICK - 仍然遇到同样的问题。
【解决方案3】:

这对我有用:-

 private static final int GALLERY_INTENT = 2;

Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, GALLERY_INTENT);

在活动结果中

if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK && data != null) { //do something }

并确保您已将这些添加到清单文件中

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

【讨论】:

  • 我已经完成了所有这些。我的代码没有任何遗漏,因为它通常工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多