我正在发起一个媒体意图拍照。在用户拍照并返回之前的活动后,整个应用程序已重新启动。
由于这不会一直发生,我认为我的应用程序会进入后台,当设备内存不足时,android 会杀死它。
有什么方法可以防止我的应用程序进入后台?
谢谢!
我正在发起一个媒体意图拍照。在用户拍照并返回之前的活动后,整个应用程序已重新启动。
由于这不会一直发生,我认为我的应用程序会进入后台,当设备内存不足时,android 会杀死它。
有什么方法可以防止我的应用程序进入后台?
谢谢!
这是 Android 中的正常行为,如果系统内存不足,所有当前在屏幕上不可见的活动(之后onStop
)都可以在不通知(即)的情况下被杀死。onDestory
这通常发生在我们的一款测试设备上的应用程序上,无论我们的应用程序如何,它都会出现内存问题。
当您通过意图打开相机时,您通常可以重新创建此行为,然后旋转设备(纵向到横向),这也会杀死并重新创建您的应用程序。
为了解决这个问题,您需要扩展onSaveInstanceState
并使用savedInstanceState
您的参数onCreate
从杀死的实例传递给新实例一些重要信息(例如“我们正在从相机获取图片”)。
我能想到两种可能...
它不是杀死活动,而是意图启动一个新活动。您可以通过在 manifest.xml 中放置一个标签作为活动标签中的属性来阻止这种情况,如下所示:
<activity android:name=".nameOfActivity"
android:launchMode="singleTop" />
确保媒体意图在处理照片的活动下,而不是主/启动器活动。
IMO 两种选择:
我遇到了这个问题,并在研发后得到了解决方案。设置 Target Android 4.0 然后在活动的 AndroidManifest.xml 中添加这一行:
android:configChanges="screenLayout|uiMode|orientation|screenSize|smallestScreenSize"
这个对我有用。
当您启动媒体意图时,请使用以下方法而不是 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 方法在两个活动之间发送和接收数据。
这有望解决您的问题。如有疑问评论。如果可能的话,分享你的代码,这样可以更清楚。