我的代码在越来越小的设备(摩托罗拉Xoom,三星Galaxy Player 4.0,Kyocera Digno)上按预期工作,但对于三星Galaxy Tab 7.0,在启动ACTION_IMAGE_CAPTURE
意图并拍照后,调用应用返回onDestroy()
,然后调用onCreate()
,然后调用 onActivityResult()
,最后调用onDestroy()
和onCreate()
再次,这当然是不可取的 - 只应调用onActivityResult()
。
可能的线索:
如果需要更多信息或代码示例,请与我们联系。
修改:问题已缩小为方向更改。根据Karthik的回答,设置android:configChanges="orientation"
可以解决问题。唯一的问题是,我的应用程序支持xlarge屏幕上的方向更改。此设置会在这些设备上中断此功能。我已尝试使用android:configChanges="@string/config_changes"
并根据屏幕大小提供不同的字符串,但现在我收到“安装错误:INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION”。根据这个Android Activity, how to override manifest's android:configChanges with Java code?,没有办法以编程方式设置它。我唯一的选择是手动处理我的应用中的所有方向更改吗?
答案 0 :(得分:2)
你是对的,这是由于方向的改变。相机在Galaxy Tab中以横向模式工作
因此,您可以将android:configChanges="orientation"
添加到明确文件中的<activity>
标记中。
这可以解决您的问题。 1}}和onDestroy()
在从相机返回时不会被调用。
答案 1 :(得分:2)
我发现我的应用程序重新启动的原因是因为设备在启动相机应用程序时耗尽了内存并且操作系统回收了我的主要活动。这不会是一个问题,除了我有一个基于片段的布局和一些片段初始化正在onCreate()
完成,无论savedInstanceState。这导致自动片段恢复被丢弃,并使应用程序看起来像从一开始就重新启动,而实际上它只是试图恢复。
例如:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// add main menu -- WRONG!
MainMenuFragment mainMenu = new MainMenuFragment();
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
ft.add(R.id.contents, mainMenu);
ft.commit();
if (savedInstanceState != null) {
// <restore state>
}
else {
// <initialize stuff>
}
}
为了解决这个问题,我在savedInstanceState不为null时跳过Fragment初始化,并确保在onSaveInstanceState()
中正确保存状态并在onCreate()
中恢复,并实现{{}的正常处理1}}。
例如:
onActivityResult()