[英]How to know “Don't keep activities” is enabled in ICS?
如何通過代碼在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;
}
我同意@Kaediil認為Android應用程序必須正常工作,同時檢查“不要保持活動”選項。
因某些原因如果你必須檢查“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);
}
提問者是對的,他有一個很好的問題,但仍未得到回答:-)
我用一個干凈的簡單例子測試了這個問題。 事實是,當選中“不保持活動”選項時,活動將被終止。 例如:Mainactivity調用子活動。 主要活動被殺死了。 按下子活動會導致重新啟動Mainactivity。 這可能是一個問題,當主要活動正在做諸如加載內容等長期運行的東西時。
我對此的結論。 “不保留活動”選項是開發人員選項,不應在正常用戶條件下設置。 因此開發人員應該能夠檢測到此設置。
int value = Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES,0);
您還可以使用意圖並每次終止活動。 只需在你的onBackPressed()中調用ReturnToMain,就應該打敗“不要保持活動”的問題。 這是我在海外面對外國手機遇到的問題之一。
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.