2011-07-01 148 views
1

我有一個應用程序定期檢查服務器的一些標誌。 然後根據此標誌的值顯示一條消息。有沒有辦法獲得應用程序的當前狀態?

我不想顯示消息,那麼應用程序不在前面。 我使用SharedPreferences手動存儲應用程序狀態。 在每次活動我做這樣的事情:

@Override 
protected void onStart() { 
    super.onStart(); 
    SharedPreferences.Editor prefs = context.getSharedPreferences("myprefs", getApplicationContext().MODE_PRIVATE).edit(); 
    prefs.putBoolean("appInFront", true); 
    prefs.commit(); 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    SharedPreferences.Editor prefs = context.getSharedPreferences("myprefs", getApplicationContext().MODE_PRIVATE).edit(); 
    prefs.putBoolean("appInFront", false); 
    prefs.commit(); 
} 

這讓我從「appInFront」偏好獲取應用程序的狀態:

SharedPreferences prefs = context.getSharedPreferences("myprefs", Context.MODE_PRIVATE); 
boolean appInFront = prefs.getBoolean("appInFront", true);  

但可能存在本地方法或方式來獲得應用程序的當前狀態(應用程序是在前臺還是在後臺)?

回答

3

你顯示的是什麼樣的信息?通知或你的活動中的某些信息? 你的應用程序中的哪個位置需要該狀態信息?

您可以編寫一個BaseActivity並擴展所有其他活動。所以你需要編寫更少的代碼。而作爲的onPause對口(),你應該使用的onResume():

public class BaseActivity{ 

public static boolean appInFront; 

@Override 
protected void onResume() { 
    super.onResume(); 
    appInFront = true; 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    appInFront = false; 
} 

}

隨着靜態公共布爾提問可「隨時隨地」爲您的應用程序的可見性狀態。 您可能不需要記住應用程序重新啓動之間的狀態,因此布爾值就足夠了。

if(BaseActivity.appInFront){ 
    //show message 
} 
+0

我在BroadcastReceiver中使用Toast Notifications,就像SDKDeveloper中的ApiDemos/app/AlarmController一樣。 – Serg

+0

謝謝赫爾曼,我這樣做了。 – Serg

+0

爲什麼在onResume方法中有super.onStart()? – maysi

相關問題