簡體   English   中英

如何在ICS中啟用“不要保持活動”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM