4

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

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

有什么方法可以防止我的应用程序进入后台?

谢谢!

4

5 回答 5

12

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

这通常发生在我们的一款测试设备上的应用程序上,无论我们的应用程序如何,它都会出现内存问题。

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

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

于 2012-04-22T08:05:35.170 回答
2

我能想到两种可能...

  1. 它不是杀死活动,而是意图启动一个新活动。您可以通过在 manifest.xml 中放置一个标签作为活动标签中的属性来阻止这种情况,如下所示:

    <activity android:name=".nameOfActivity"
    android:launchMode="singleTop" />

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

于 2012-04-19T20:18:44.057 回答
1

IMO 两种选择:

  1. 实施 onSaveInstanceState/onRestoreInstanceState 或
  2. 让您的活动成为一项服务。
于 2012-04-23T21:59:42.597 回答
1

我遇到了这个问题,并在研发后得到了解决方案。设置 Target Android 4.0 然后在活动的 AndroidManifest.xml 中添加这一行:

android:configChanges="screenLayout|uiMode|orientation|screenSize|smallestScreenSize"

这个对我有用。

于 2013-01-02T14:07:41.047 回答
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 方法在两个活动之间发送和接收数据。

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

于 2012-04-23T12:27:15.607 回答