2012-07-27 62 views
1

运行服务的结果我有我的程序有问题,当我运行程序我NEDD 2次迭代更新名为“existe”。我做这个更新处理一个变量。 我认为是一个同步问题,但我不知道它在哪里。 我有1 broadcastreceiber recibe服务的方法的回应,但我认为它首先完成按钮处理程序代码,然后它运行broadcastreceiber。 虽然我认为broadcastreceiber应该在recibe方法服务的响应时运行吗? 感谢您的帮助。我需要的主线程等待的背景

这是按钮处理程序的代码:

View.OnClickListener buttonhandler=new View.OnClickListener(){ 

    public void onClick(View v) { 
     EditText id_camarero = (EditText) findViewById(R.id.id_camarero); 
     String numero = id_camarero.getText().toString(); 
     if(numero.trim().equals("")){ 
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

      // set title 
      alertDialogBuilder.setTitle("Fallo de id"); 

      // set dialog message 
      alertDialogBuilder 
       //.setMessage("Click salir para finalizarprograma") 
       .setCancelable(false) 
       .setPositiveButton("Salir",new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog,int id) { 
         // if this button is clicked, close 
         // current activity 
         MainActivity.this.finish(); 
        } 
        }) 
       .setNegativeButton("Reintentar",new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog,int id) { 
         // if this button is clicked, just close 
         // the dialog box and do nothing 
         dialog.cancel(); 
        } 
       }); 

       // create alert dialog 
       AlertDialog alertDialog = alertDialogBuilder.create(); 

       // show it 
       alertDialog.show(); 


     } 
     idcamarero=Integer.parseInt(numero); 
     comprobacion(); 
     //IntentFilter filter = new IntentFilter(MyService.DATA_RECEIVED_INTENT); 
     // registerReceiver(androidListener, filter); 
    if((existe==false)){ 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

       // set title 
       alertDialogBuilder.setTitle("Fallo de id"); 

       // set dialog message 
       alertDialogBuilder 
        //.setMessage("Click salir para finalizarprograma") 
        .setCancelable(false) 
        .setPositiveButton("Salir",new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog,int id) { 
          // if this button is clicked, close 
          // current activity 
          MainActivity.this.finish(); 
         } 
         }) 
        .setNegativeButton("Reintentar",new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog,int id) { 
          // if this button is clicked, just close 
          // the dialog box and do nothing 
          dialog.cancel(); 
         } 
        }); 

        // create alert dialog 
        AlertDialog alertDialog = alertDialogBuilder.create(); 

        // show it 
        alertDialog.show(); 
       } 

    else{ 
    // Intent intent= new Intent(GestorRestauranteActivity.this,MenuMesas.class); 
    // intent.putExtra("id", numero);//enviamos el id de camarero a la actividad que invocamos 
    // startActivity(intent); 
    finish(); 
    } 
    } 

}; 

这是broadcastreceiber的代码:

BroadcastReceiver androidListener = new BroadcastReceiver() 

{ 
@Override 

    public void onReceive(Context context, Intent intent) 

    { 
     if (intent.getAction().equals(MyService.DATA_RECEIVED_INTENT)) 
     {    
      Message msg = Message.obtain(); 
      msg.obj = intent.getExtras().get("text"); 

      msg.setTarget(cEmiHandler); 
      msg.sendToTarget();      
     } 
    } 
}; 

回答

0

不要让问题更加复杂那样,简单的解决方法是使用wait() Object类的notify()方法。 在主线程中,您通过wait()方法锁定对象,在另一个线程(工作线程执行主任务)中锁定对象,在任务完成时使用notify(),主线程将被解锁并继续。

Object x = new Object(); 

在主线程中:x.wait(); 在工作者线程中:执行该任务,然后x.notify();