私のデモプロジェクトでは、プッシュメッセージの受信に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()関数は呼び出されません。
前もって感謝します