Android系统在启动Media Intent时停止应用程序

时间:2012-04-16 14:57:02

标签: android

我正在发起媒体意图拍照。在用户拍照并返回上一个活动后,整个应用程序已重新启动。

由于这不会一直发生,我认为我的应用程序会进入后台,当设备内存不足时,android会将其杀死。

有没有办法阻止我的应用程序进入后台?

谢谢!

5 个答案:

答案 0 :(得分:12)

这是Android中的正常行为,如果系统内存不足,屏幕上当前不可见的所有活动(onStop之后)都可以在不事先通知的情况下被杀死(即onDestory)。

这通常发生在我们的某个测试设备上的应用中,无论我们的应用是什么,都会出现内存问题。

当你通过意图打开相机时,你可以通常重新创建这种行为,然后旋转设备(纵向到横向),这也会杀死并重新创建你的应用。

要解决这个问题,您需要扩展onSaveInstanceState并使用savedInstanceState中的onCreate参数从被杀死的实例传递给您的新实例一些重要信息(例如“我们是在从相机获取照片的过程中“)。

答案 1 :(得分:2)

我能想到两种可能性......

  1. 它不会杀死活动,但意图会启动一项新活动。您可以通过在manifest.xml中将标记作为活动标记中的属性放置,如下所示:

    <活性     机器人: “nameOfActivity” NAME =
        android:launchMode =“singleTop”/>

  2. 确保媒体意图处于处理照片的活动之下,而不是主/启动器活动。

答案 2 :(得分:1)

IMO有两个选择:

  1. 实现onSaveInstanceState / onRestoreInstanceState 或
  2. 让您的活动成为一种服务。

答案 3 :(得分:1)

我遇到了这个问题并在R& D之后找到了解决方案。 设置Target Android 4.0,然后在活动的AndroidManifest.xml中添加此行:

机器人:configChanges = “屏幕布置| uiMode |取向|屏幕尺寸| smallestScreenSize”

它对我有用。

答案 4 :(得分:0)

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

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意图在两个活动之间发送和接收数据。

这有望解决您的问题。 如果你有疑问评论。如果可能的话,可以共享您的代码,以便更清晰。