1

私のデモプロジェクトでは、プッシュメッセージの受信にGCMを使用しています。受信しているプッシュメッセージを同期して処理する必要があります。プッシュを受信したら、いくつかのタスクを実行して確認応答をサーバーに送信する必要があります(確認応答は非同期タスクによって送信されます)。プロジェクトは機能しています。通常のシナリオでは問題ありませんが、データ接続をオフにし、10個のプッシュメッセージを送信してから電話のデータ接続をオンにすると、メッセージをまとめて受信するため、GCMがハングし、その後は処理されません。押す。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()関数は呼び出されません。

前もって感謝します

4

1 に答える 1

0

待機や通知などの低レベルの同期方法は実際には使用しないでください。それらを正しく使用するには非常に注意が必要です。Androidアプリで非同期タスクを実行する場合は、おそらくAsyncTaskがニーズに適しています。そうでない場合は、java.util.concurrentパッケージの使用を検討してください。

于 2013-03-20T02:02:15.423 に答える