安卓系统在启动媒体Intent时会停止应用程序。

5
我正在启动一个媒体意图以拍照。在用户拍照并返回到上一个界面后,整个应用程序已重新启动。
由于这种情况并非总是发生,我认为当设备内存不足时,我的应用程序进入了后台并被Android杀死。
有没有办法防止我的应用程序进入后台?
谢谢!

你无法阻止应用程序进入后台,但可能可以使其保存状态并恢复。 - zapl
如果你想要拍照片,你的应用程序必须进入后台..在相机应用程序之后.. - Ron
展示你用于启动相机的代码。 - Ron
也许是在相机启动代码之后有些东西导致了问题。 - Ron
5个回答

13

这是在Android中的正常行为,所有当前不可见的活动(在onStop之后)可能会被系统在内存不足时无通知地销毁(即onDestory)。

我们的应用程序在一个测试设备上经常出现内存问题,无论我们的应用程序如何。

您通常可以通过使用意图打开相机,然后旋转设备(从竖屏到横屏)来重新创建这种行为,这也将杀死并重新创建您的应用程序。

为了解决这个问题,您需要扩展onSaveInstanceState并在onCreate中使用savedInstanceState参数,将一些重要信息(比如“我们正在从相机获取图片中”)从你被销毁的实例传递到新的实例中。


好的,这不是我希望得到的答案,但我看到保存应用程序状态是处理我的问题的唯一方法。谢谢! - timoschloesser
你有没有针对使用Phonegap的应用程序的解决方案? - Dani

2
我能想到两种可能性...
1. 它并没有杀死该活动,而是意图启动了一个新的活动。您可以通过在活动标记中添加一个标签来阻止这个问题,像这样: 2. 确保媒体意图位于处理照片的活动下,而不是主/启动器活动。

1
我曾经遇到过这个问题,经过研究后找到了解决方案。 设置目标 Android 4.0,然后在活动的 AndroidManifest.xml 文件中添加以下行:
android:configChanges="screenLayout|uiMode|orientation|screenSize|smallestScreenSize"
对我来说有效。

1

我认为有两个选项:

  1. 实现 onSaveInstanceState/onRestoreInstanceState
  2. 或者
  3. 将您的活动作为服务。

0

当您启动媒体意图时,请使用以下方法而不是startActivity(intent)

startActivityForResult(intent, REQUEST_CODE); //private int REQUEST_CODE = 232

当启动的活动完成后,您的调用活动将被启动。您需要使用以下函数来处理此问题

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
      //Perform your task       
      }
}

开始这个活动需要重写以下方法

@Override
    public void onBackPressed() {
        Intent intent = new Intent();
        setResult(REQUEST_CODE, intent);
        super.onBackPressed();
    }

startActivityForResult() 是一种特殊的启动活动方式,用于执行特定任务并获取所需结果。被调用的活动将返回数据。

您可以使用 putExtra() 和 getExtra 方法在意图中发送和接收两个活动之间的数据。

这将希望解决您的问题。 如果您有疑问,请发表评论。如果可能,请分享您的代码,以便更清晰地了解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接