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