写真を撮るというメディア インテントを起動しています。ユーザーが写真を撮り、前のアクティビティに戻ると、アプリケーション全体が再起動されます。
これは常に発生するわけではないため、デバイスのメモリが少ないと、アプリケーションがバックグラウンドになり、Android がそれを強制終了すると思います。
アプリケーションがバックグラウンドにならないようにする方法はありますか?
ありがとう!
写真を撮るというメディア インテントを起動しています。ユーザーが写真を撮り、前のアクティビティに戻ると、アプリケーション全体が再起動されます。
これは常に発生するわけではないため、デバイスのメモリが少ないと、アプリケーションがバックグラウンドになり、Android がそれを強制終了すると思います。
アプリケーションがバックグラウンドにならないようにする方法はありますか?
ありがとう!
これは Android の通常の動作です。現在画面に表示されていないすべてのアクティビティ ( の後) は、システムのメモリが少ない場合、onStop
予告なしに (つまり) 強制終了される可能性があります。onDestory
これは通常、アプリに関係なくメモリの問題があるテスト デバイスの 1 つのアプリで発生します。
通常、インテントを介してカメラを開いてデバイスを回転させると (縦から横に)、この動作を再現できます。これにより、アプリも強制終了され、再作成されます。
これを解決するには、パラメーターを拡張onSaveInstanceState
して使用し、強制終了されたインスタンスから新しいインスタンスに重要な情報を渡す必要があります (「カメラから写真を取得している最中です」など)。savedInstanceState
onCreate
2つの可能性が考えられます...
アクティビティを強制終了するわけではありませんが、インテントによって新しいアクティビティが開始されます。次のように、アクティビティ タグの属性として manifest.xml にタグを配置することで、これを停止できます。
<アクティビティ android:name=".nameOfActivity"
android:launchMode="singleTop" />
メディア インテントがメイン/ランチャー アクティビティではなく、写真を処理するアクティビティの下にあることを確認してください。
IMO 2 つのオプション:
私はこの問題に直面し、研究開発後に解決策を得ました。ターゲット 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 を使用して、2 つのアクティビティ間でデータを送受信できます。
これで問題が解決することを願っています。疑問がある場合はコメントしてください。可能であれば、コードを共有して、より明確にすることができます。