解
取而代之的是服务,我使用了AlarmManager来解决问题,现在,它可以正常工作。
全部谢谢!
我正在尝试多次使用不同信息的服务。
我写的服务代码示例如下:
public int onStartCommand(Intent intent, int flags, int idArranque) {
int time = intent.getExtras().getInt("timePhase");
new CountDownTimer(time*1000,5000){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
//Other code here....
Toast.makeText(getApplicationContext(),"Finished: "+nameMedicine,Toast.LENGTH_LONG).show();
}
}.start();
return START_STICKY;
}
从Activity中,每次调用Service时,都会传递一个包含CountDown时间的bundle,但是它无法正常工作。我假设服务中收到的变量被覆盖了最后一次致电该服务。
有没有办法在不同的进程中运行每个服务以避免覆盖?
我读过这个:
链接1:Use same service multiple times
链接2:What happens if a Service is started multiple times?
链接3:Multiple timers using same service
但我不确切知道该怎么办。
Service.java
public class timePhase extends Service {
SQLiteDatabase db;
UsuariosSQLiteHelper usdbh;
String nameMedicine;
int time=0;
int idPaciente;
int idMedicamento;
int count=0;
Bundle b;
@Override
public void onCreate() {
}
@Override
public int onStartCommand(Intent intent, int flags, int idArranque) {
count++;
int time = intent.getExtras().getInt("timePhase");
idPaciente = intent.getExtras().getInt("idPatient");
idMedicamento = intent.getExtras().getInt("idMedicine");
banAccess(true);
new CountDownTimer(time*1000,5000){
//TODO: Toast no funciona
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
banAccess(false);
Toast.makeText(getApplicationContext(),"Ha acabado el tiempo de espera de "+nameMedicine,Toast.LENGTH_LONG).show();
count--;
if(count==0) stopSelf();
}
}.start();
return START_STICKY;
}
@Override
public void onDestroy() {
}
@Override
public IBinder onBind(Intent intencion) {
return null;
}
public void banAccess(boolean status){
usdbh = new UsuariosSQLiteHelper(this, "DB", null, 1);
usdbh.getWritableDatabase();
db = usdbh.getWritableDatabase();
if(status) db.execSQL("Update pacienteCompuesto set validado=4 where id_paciente="+idPaciente+" and id_medicamento="+idMedicamento);
else db.execSQL("Update pacienteCompuesto set validado=2 where id_paciente="+idPaciente+" and id_medicamento="+idMedicamento);
}
}
每次从活动中点击ListView上的项目时,都会启动此服务。 我将一些变量传递给服务,只需通过Bundle点击ListView中的项目,比如CountDown的计时器,以及在CountDown完成时更改数据库的其他重要变量。
如果我单击ListView的一个项目并启动该服务,它可以正常工作。 如果我单击ListView的一个项目,然后单击其他项目,则服务的局部变量属于第二个项目......由此,单击的第一个项目的CountDown未正确完成(要修改的指令)单击第一个项目的值时不执行数据库,但是第二个单击项目的值为yes。