多次使用同一服务

时间:2015-05-07 18:25:49

标签: android android-service

取而代之的是服务,我使用了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。

0 个答案:

没有答案