設定で知る方法「アクティビティを保持しない」オプションは、コードを介してicsで有効になっています。有効になっている場合、アクティビティを防ぐ方法。
注:アプリケーションでより多くのアクティビティを使用しました。その設定のため、あるアクティビティを別のアクティビティに移動すると、最初のアクティビティが破棄されます。データをonSaveInstanceStateに保存できます。保存されたインスタンスの状態を使用せずに行う方法はあります...
前もって感謝します..
設定で知る方法「アクティビティを保持しない」オプションは、コードを介してicsで有効になっています。有効になっている場合、アクティビティを防ぐ方法。
注:アプリケーションでより多くのアクティビティを使用しました。その設定のため、あるアクティビティを別のアクティビティに移動すると、最初のアクティビティが破棄されます。データをonSaveInstanceStateに保存できます。保存されたインスタンスの状態を使用せずに行う方法はあります...
前もって感謝します..
次のパッケージをインポートします
import android.provider.Settings;
次に、次のコードを使用して、オプションが有効になっているかどうかを確認できます。
Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
これを使用して変更できます。
Settings.System.putInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
それが役に立てば幸い
Settings.System.ALWAYS_FINISH_ACTIVITIES
現在は非推奨になっているため、使用する必要があります
Settings.Global.ALWAYS_FINISH_ACTIVITIES.equals("1")
このオプションが有効になっているかどうかを確認するには
更新(Aviv Ben Shabatコメントに感謝):
すべてのSDKバージョンを処理するために、メソッドを作成しました。
public static boolean isFinishActivitiesOptionEnabled(Context context) {
int result;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
result = Settings.System.getInt(context.getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
} else {
result = Settings.Global.getInt(context.getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
}
return result == 1;
}
その旗はまさにこの理由でそこにあります。アイデアは、アプリが破壊されたアクティビティを処理することを確認して確認することです。現実の世界では、デバイスのメモリが不足している場合、そのフラグがなくても発生する可能性があるため、オーバーライドすることはできません。このケースをオーバーライドせずに処理するようにコーディングする必要があります。
「アクティビティを保持しない」オプションがチェックされている間、Androidアプリケーションは正常に動作する必要があるという@Kaediilに同意します。
何らかの理由で「alwaysFinishActivities」の値を確認する必要がある場合は、以下のコードを使用できます。
/**
* returns true if AlwaysFinishActivities option is enabled/checked
*/
private boolean isAlwaysFinishActivitiesOptionEnabled() {
int alwaysFinishActivitiesInt = 0;
if (Build.VERSION.SDK_INT >= 17) {
alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
} else {
alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
}
if (alwaysFinishActivitiesInt == 1) {
return true;
} else {
return false;
}
}
alwaysFinishActivitiesオプションがチェックされていて、それをオフにしたい場合。
ユーザーを「設定->開発者向けオプション」に誘導して、その値のチェックを外すことができます。(これは、余分な恐ろしい権限を取得して、この値をプログラムで設定するよりも優れています)
/**
* shows Settings -> Developer options screen
*/
private void showDeveloperOptionsScreen(){
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
質問者は正しいです、そして彼は良い質問を持っています、それはまだ答えられていません:-)
私はこの問題をわかりやすい簡単な例でテストしました。実際には、[アクティビティを保持しない]オプションをオンにすると、アクティビティが強制終了されます。例:メインアクティビティはサブアクティビティを呼び出します。主な活動は殺されます。サブアクティビティを押し戻すと、メインアクティビティが再開されます。これは、メインアクティビティがコンテンツの読み込みなどの長時間実行を行う場合に問題になる可能性があります。
これについての私の結論。オプション「アクティビティを保持しない」は開発者向けオプションであり、通常のユーザー条件では設定しないでください。したがって、開発者はこの設定を検出できるはずです。
int value = Settings.System.getInt(getContentResolver()、Settings.System.ALWAYS_FINISH_ACTIVITIES、0);
インテントを使用して、毎回アクティビティを強制終了することもできます。onBackPressed()でReturnToMainを呼び出すだけで、「アクティビティを保持しない」問題を解決できます。これは私が海外で外国の受話器で直面している問題の1つです。
public void ReturnToMain() {
Intent view_user = new Intent(PanicAddUpdate.this, PanicAddMain.class);
view_user.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(view_user);
finish();
}
他のオプションは、以下の@aegeanのソリューションです。その値のチェックを外すには、ユーザーを「設定->開発者向けオプション」に誘導する必要があります。これがダイアログボックスで使用したものです。戻るボタンを押したときにアプリがクラッシュしないようにfinish()を追加するか、ホームボタンを押した後にアプリを再起動してみてください。
public void showDeveloperOptionsScreen(){
new AlertDialog.Builder(this)
.setTitle("Developer Options Detected!")
.setMessage("In order for Sender to work properly, please uncheck the \"Don't keep activities\" option.")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
}
}).create().show();
}