所以,这个问题已在本论坛上以多种形式提出,但没有一个答案对我有所帮助。我有一个我只能在三星Galaxy S3上重现的错误。
我想简单地使用手机的相机拍摄并存储照片,但在我收到onActivityResult的回复之前,我的活动正在被销毁。这只发生在我以纵向模式使用相机时,在横向模式下它很好。
我正在使用此代码启动相机:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, Config.ACTIVITY_TAKE_PHOTO);
在纵向模式下,我从未看到对onActivityResult的调用(来自Camera活动),我只看到在我的启动活动中调用的onDestroy()。日志中没有异常或错误,并且没有明显错误使其崩溃。
我见过帖子建议在Manifest中添加“android:configChanges =”orientation | keyboardHidden“”,并做很多其他事情来管理使用相机时发生的方向变化,但到目前为止没有任何帮助
还有其他人解决了这个问题吗?
答案 0 :(得分:19)
如果您的定位超出API级别13,添加
android:configChanges="orientation|keyboardHidden"
到Manifest是不够的。
检查此摘录注意:如果您的应用程序的目标是13级或更高级别(由minSdkVersion和targetSdkVersion属性声明),那么您还应该声明“screenSize”配置,因为当设备在纵向和横向之间切换时,它也会发生变化。
因此尝试添加
android:configChanges="orientation|keyboardHidden|screenSize"
到您的清单文件。这应该可以解决你的问题。
答案 1 :(得分:1)
Android可以在某些情况下调用destroy()方法。一个是我们使用方法finish()。另一种方法是使用Activity类的isFinishing()方法。如果它确实正在最终确定可以最终确定它们的资源,否则,你可以保持值分配一个继承Application的类
@Override
protected void onDestroy() {
final YourApp app = (YourApp) getApplicationContext();
if (app != null && isFinishing()) {
app.finalizeAppResources();
}
// ...
super.onDestroy();
}