java为什么关闭应用程序后会重置计时器?
我有一个计时器,可以显示允许用户再次播放的剩余时间。 我意识到服务可以帮我做到这一点。因此,我在单独的进程中创建了一个带有START_STICKY标记的。并使用接收器获取结果。。这样行吗但当我关闭应用程序时,服务将重新启动,一切都将从头开始
Question is : How do I prevent to the restart the service or another? way to fix this problem ?!
泰。问候
my activity:
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onDestroy() {
super.onDestroy();;
}
public static void StartService(Context context,int globalTime,int localTime){
Intent i= new Intent(context,Services.class);
i.putExtra("value", localTime);
i.putExtra("value2", true);
context.startService(i);
}
}
my Reciver:
public class Reciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int defaultValue = -1;
Toast.makeText(context,String.valueOf(intent.getIntExtra("value", defaultValue), Toast.LENGTH_SHORT).show();
}
}
my Service:
public class Services extends Service {
int id;
@Override
public void onCreate(){
alarm();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
id = startId;
maxTimerValue = mainIntent.getIntExtra("value", 0);
if(currentTimerValue < maxTimerValue){
currentTimerValue++;
BroadCatster();
}else{
currentTimerValue = 0
}
}
}
public void alarm(){
Intent i = new Intent(this, Services.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 1000, pi);
}
public void BroadCatster(){
Intent intent = new Intent(this,Reciver.class);
intent.setAction("RECIVER_FILTER");
intent.putExtra("value", currentTimerValue);
this.sendBroadcast(intent);
}
}
}
MainFest
<receiver 安卓:name="com.example.Reciver">
<intent-filter>
<action 安卓:name="RECIVER_FILTER" />
</intent-filter>
</receiver>
<service
安卓:enabled="true"
安卓:exported="false"
安卓:name="com.example.Services"
安卓:label="@string/app_name"
安卓:process=":Service">
</service>
# 1 楼答案
没有完美的方法可以阻止您的服务被停止。START_STICKY并不意味着Android不会终止该服务。如果出现资源短缺,Android可能仍然会终止该服务,STICKY只会比OS在资源短缺消失后重启该服务更有帮助
所以最基本的问题是,你假设服务永远不会被终止,而你的时间依赖于此。最好将上次播放的时间存储在首选项或SQLlite中(或将其放在onSaveInstance状态的捆绑包中),并在每次使用onStartCommand时从中读取。当然,您需要处理在堆栈溢出上有许多线程的用户时间更改,您可以参考这些线程
# 2 楼答案
@mr.bug我对“服务”没有任何概念,但我可以为您的计时器提供一个逻辑建议,只需将开始时间保存在共享首选项中,或者任何对您方便的选项中,当您的应用程序再次启动时,取下开始时间和当前时间的差异
# 3 楼答案
将此添加到服务的onCreate中