Android:由于线程通知和等待,Gcm正在被绞死

时间:2013-03-18 05:58:46

标签: android thread-safety push-notification google-cloud-messaging

在我的演示项目中,我使用GCM接收推送消息。我需要处理我以同步方式接收的推送消息。一旦我收到我的推送,我需要做一些任务并将确认发送到我的服务器(确认是由异步任务发送的。)我的项目正在运行在正常情况下很好,但如果我关闭我的数据连接,如果我给10推送消息,然后我打开我的手机的数据连接,我的GCM正在收到Hanged,因为它收到一堆消息,之后它不处理我的推。 Plz有助于解决这个问题

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,就不会调用Override OnMessage()函数..

先谢谢

1 个答案:

答案 0 :(得分:0)

你真的不应该使用等级和通知等低级同步方法。正确使用它们非常棘手。 如果您想在Android应用中执行异步任务,则AsyncTask可能适合您的需求。如果没有,请考虑使用java.util.concurrent包。