你可能知道Google Cloud Messaging的Android如何更新从其他类(UI线程)(真的吗?)
的问题是,当一个GCM消息由服务器触发,我的应用程序会收到来自谷歌播放服务捆绑,这发生在GcmBroadcastReceiver.java
。在这里,我可以将这些数据发送到其他类,以便从服务器追加一些信息。当我尝试更新时,我陷入了困境,例如,UI线程中的一些视图。
如何做到这一点?
试想一下,MainActivity.java
是UI线程,当我宣布的意见等
我试图在这里建立一个公共静态方法,可以直接通过GcmBroadcastReceiver.java
这种方式被称为:MainActivity.*updateUI*(args..)
,但它引发此异常:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
任何人都可以试图解释我吗?我也知道关于asyncTask,但我无法想象它是如何工作的。我还发现一些页面解释了由UI线程触发的事件,它就像在后台执行一些任务的runnables一样。林寻找这样的事情:
MainActivity extends Activity{
...
protected void onCreate(Bundle blabla)..{
setContentView(R.layout.blabla);
registerSomeEvent(this);
}
private void handleEvent(Bundle ...){
... do stuff with the data provided in the UI thread
}
}
而且在这里GcmBroadcastReceiver
,当GCM推送一些数据,触发,为了神奇的事件在UI线程的一些看法一样ListViews
或TextView
不要调用静态方法,在你的'MainActivity'创建一个广播接收器,然后在你的'GcmBroadcastReceiver'发送广播到您的活动告诉它该怎么做(刷新/更新) – tyczj 2015-02-23 19:44:24