1

在我的演示項目中,我正在使用GCM接收推送消息。我需要處理我以同步方式接收的推送消息。一旦我收到我的推送信息,我需要執行一些任務並將確認發送到我的服務器(確認由異步任務發送)。我的項目正在工作正常情況下,但如果我關閉數據連接,如果我給10推信息,然後我打開我的電話的數據連接,我的GCM被絞死,因爲它接收消息作爲一堆,之後,它不處理我推。 PLZ幫助解決這個問題Android:由於線程通知而等待Gcm被掛起並等待

MyGCMService.java

public class MyGCMService extends GCMBaseIntentService{ 
    ..... 

    public GCMIntentService() { 

     ... 
     myThreadClass =new MyThreadClass(); 

    } 

    @Override 
    protected void onRegistered(Context context, String registrationId) { 

     .... 
    } 

    @Override 
    protected void onUnregistered(Context context, String registrationId) { 
     .... 
    } 

    @Override 
    protected void onMessage(Context context, Intent intent) { 

     try{ 
     // System.out.println("*********** 4-3- "+String.valueOf(myThreadClass.getState()).equals("NEW")); 
      if(String.valueOf(myThreadClass.getState()).equals("NEW")) 
     myThreadClass.start(); 
     }catch(Exception e){ 

     } 
     synchronized (myThreadClass) { 
      ... 
      myThreadClass.wait(); 
     } 

    } 


    @Override 
    protected void onDeletedMessages(Context context, int total) { 
     ... 
    } 

    @Override 
    public void onError(Context context, String errorId) { 
     .... 
    } 

    @Override 
    protected boolean onRecoverableError(Context context, String errorId) { 
     .... 
    } 


    public void OnDestroy() { 

     super.onDestroy(); 

    }  
} 

MyTreadClass.java

public class MyThreadClass extends Thread { 


    MyThreadClass myThreadClass; 
    String LOG_TAG = MyThreadClass.class.getSimpleName(); 

    public void run() { 
     synchronized (this) { 

      Looper.prepare(); 

      performAction(); 

      notify(); 

     } 

    } 

    public MyThreadClass() { 
     myThreadClass=this; 
    } 



    public void performMDMAction() { 

     //Doing Some task and Sending Ack. through Async task 
    } 



} 

一旦這個線程掛起我的GCMBaseIntentService,在覆蓋的onMessage()函數不叫..

在前提前感謝

回答

0

你真的不應該使用低等級的同步方法,如等待和通知。正確使用它們非常棘手。 如果你想在Android應用程序中執行異步任務,或許AsyncTask將適合你的需求。如果不是,請考慮使用java.util.concurrent包。