2012-04-16 86 views
3

我正在启动媒体意图拍摄照片。在用户拍摄照片并回到之前的活动之后,整个应用程序重新启动。由于这种情况一直没有发生,我认为我的应用程序进入后台,当设备内存不足时,android会杀死它。Android系统在启动Media Intent时停止应用程序

有什么办法让我的应用程序无法进入背景吗?

谢谢!

+0

你不能阻止你的应用程序转到后台,但你可以使它保存状态并恢复它 – zapl 2012-04-16 14:58:53

+0

如果你想拍一张照片,你的应用程序必须去后台..在相机应用程序后面。 。 – Ronnie 2012-04-22 06:36:33

+0

显示用于启动相机的代码.. – Ronnie 2012-04-22 06:36:57

回答

10

这是Android的正常行为,一切活动目前未显示在屏幕上(onStop后),随时都可能被杀死(即onDestory)如果系统内存不足。

这通常发生在我们的测试设备之一的应用程序上,无论我们的应用程序如何,这些设备都有内存问题。

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

为了解决这个问题,你需要扩展onSaveInstanceState并在onCreate使用savedInstanceState参数从你杀了实例传递给你的新实例一些重要信息(如“我们是在从相机得到一个PIC中间” )。

+0

好吧,这不是我所希望的答案,但我发现试图保存应用程序状态是解决我的问题的唯一方法。谢谢! – timoschloesser 2012-04-25 07:32:51

+0

你有使用Phonegap的应用程序的解决方案吗? – 2018-02-13 13:30:40

2

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

  1. 这不是杀死活动,但目的推出的新活动。

    <活动 机器人:您可以通过将一个标签在你的manifest.xml作为活动标签像这样的属性停止这个名字=
    机器人“nameOfActivity”:launchMode =‘singleTop’/ >

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

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  
     } 
} 

的活动时间需要重写follwoing方法

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

startActivityForResult()是为特定任务开始活动,并得到想要的结果的特殊方式。被叫活动将发回数据。

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

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

1

IMO两个选项:

  1. 的onSaveInstanceState实现/ onRestoreInstanceState 或
  2. 让您的活动相关的服务。
0

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

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

这对我的作品。

相关问题