在我的演示项目中,我使用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()函数..
先谢谢
答案 0 :(得分:0)
你真的不应该使用等级和通知等低级同步方法。正确使用它们非常棘手。 如果您想在Android应用中执行异步任务,则AsyncTask可能适合您的需求。如果没有,请考虑使用java.util.concurrent包。