У меня есть приложение-счетчик. Он считает вещи в течение длительного периода времени (2-3 часа). В течение большей части времени, для 10-15, может быть 30-минутный прирост), приложение остается в выключенном состоянии в моем кармане. После этого долгого времени Android решает, что я не использую его и не закрываю. Поэтому я теряю все свои соображения.Работает в фоновом режиме
Что является лучшим способом сохранить активность в фоновом режиме? Я замечал использование либо wakelock, чего я не хочу делать из-за ненужного утечки батареи, и услуг, которые были бы хороши, у меня нет проблем с обслуживанием службы в фоновом режиме.
Могут ли сервисы обновлять определенные объекты интерфейса, в основном, можно обновить счетчик на моем счетчике?
и будет ли служба андроида отключать мое приложение? Я предполагаю, что я могу бороться с этим делать что-то вроде этого ...
@Override
public void onCreate(){
....
if(myService.isRunning())
Intent i = new Intent(this, MyCounterActivity.class);
startActivity(intent);
}
Это должно начать свою деятельность обратно, если андроид отключает его во время работы службы. Но тогда как я могу получить информацию от службы обратно на счетчик?
Редактировать Я решил пойти с рекомендацией sharedPreferences. поэтому для этого мне нужно что-то вроде следующего?
SharedPreference Singleton
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
Да, вы можете обновить интерфейс от сервиса.Даже если приложение будет уничтожено, служба будет работать нормально. Но сервис будет продолжать разряжать батарею. –