我有一個計數器應用程序。它在很長一段時間內(2-3小時)計算事情。在大多數時間裏,對於10-15,也許30分鐘的增量),應用程序仍然處於關閉狀態。經過這段漫長的時間後,Android決定不使用它並關閉它。所以我失去了所有的計數。保持活動在後臺運行
保持活動在後臺打開的最佳方式是什麼?我注意到使用了wakelock,我不想這樣做,因爲不必要的電池耗盡和服務,這很好,我在後臺操作服務沒有問題。
服務是否可以更新活動的特定接口對象,基本上可以更新計數器屏幕上的計數?
並將該服務阻止android關閉我的應用程序?我以爲我可以做這樣的事情本戰...
@Override
public void onCreate(){
....
if(myService.isRunning())
Intent i = new Intent(this, MyCounterActivity.class);
startActivity(intent);
}
這應該開始我的活動回來,如果機器人將其關閉,同時運行的服務。但是,我怎麼能從服務中獲得信息回到櫃檯的視覺效果呢?
編輯 我決定使用sharedPreferences建議。所以要做到這一點,我需要像下面這樣的東西?
SharedPreference辛格爾頓
public class MySharedPreference {
private static MySharedPreference mySharedPreference;
private SharedPreferences sharedPreferences;
public static MySharedPreference getInstance(Context context) {
if (mySharedPreference == null) {
mySharedPreference = new mySharedPreference(context);
}
return mySharedPreference;
}
private mySharedPreference(Context context) {
sharedPreferences = context.getSharedPreferences(MyConstants.PREF_FILE_KEY, Context.MODE_PRIVATE);
}
public void saveData(String key,String value) {
SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
prefsEditor .putString(key, value);
//prefsEditor.commit();
prefsEditor.apply();
}
public String getData(String key) {
if (sharedPreferences!= null) {
return sharedPreferences.getString(key, "");
}
return "";
}
}
Activity.class
@Override
public void onCreate(){
SharedPreferences.OnSharedPreferenceChangeListener listener;
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(key.compareTo(MyConstants.PREF_FIELD_M20_COUNT)){
m20CountTextView.setText(String.format("$1%d", prefs.getInt(key, 0)));
}else if(key.compareTo(MyConstants.PREF_FIELD_M30_COUNT)){
m30CountTextView.setText(String.format("$1%d", prefs.getInt(key, 0)))
}
}
};
MySharedPreference.getInstance().registerOnSharedPreferenceChangeListener(listener);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
m20Count++;
MySharedPreferences.getInstance().saveData(MyConstants.PREF_FIELD_M20_COUNT, m20Count);
}
});
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
m30Count++;
MySharedPreferences.getInstance().saveData(MyConstants.PREF_FIELD_M30_COUNT, m30Count);
}
});
}
@Override
public void onResume(){
updateInterfaceWithPreferences();
}
private void updateInterfaceWithPreferences(){
m20CountTextView.setText(String.format("$1%d", MySharedPreferences.getInstance().getInt(MyConstants.PREF_FIELD_M20_COUNT, 0)));
m30CountTextView.setText(String.format("$1%d", MySharedPreferences.getInstance().getInt(MyConstants.PREF_FIELD_M30_COUNT, 0)));
}
將這項工作,以節省我的數據並重新進入該得到的關斷活動時恢復。
分享偏好的店鋪數量 – Pavya
是的,你可以從服務更新UI。即使應用程序被破壞,該服務也能正常工作。但服務將繼續耗盡您的電池。 –