Android如何在活动处于后台时更新我的​​消息列表?

时间:2014-06-20 16:26:32

标签: android android-listview broadcastreceiver google-cloud-messaging

我有一个简单的聊天应用程序,我正在使用GCM接收消息并更新de UI,事情是,当应用程序进入后台时,UI未更新,如何在应用程序时更新UI在背景中?

这是代码:

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
            String iDuser = intent.getExtras().getString(EXTRA_IDQUIEN);
            String fEcha = intent.getExtras().getString(EXTRA_FECHA);
            String audio = intent.getExtras().getString(EXTRA_AUDIO);
            String video = intent.getExtras().getString(EXTRA_VIDEO);
            String imagen = intent.getExtras().getString(EXTRA_IMAGEN);
            Log.e("fecha", " "+fEcha);
            if (iDuser.equals(iduser)) {
                WakeLocker.acquire(getApplicationContext());
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("mensaje", newMessage);
                map.put("fecMens", fEcha);
                map.put("audio", audio);
                map.put("imagen", imagen);
                map.put("video", video);
                map.put("idusuario", iDuser);
                arraylist.add(map);
                Log.e("añadiendo el mensaje", newMessage);
                adapter.notifyDataSetChanged();
                WakeLocker.release();
            }
        }
    };

在第一次运行时,我执行asynctask来下载消息时间轴,然后当活动可见时,我使用广播接收器更新UI。

现在我需要在应用程序转到后台时更新该UI,例如whatsapp。

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您是否有理由无法在onResume()中执行这些UI更新?这将是首选的方法,因为你并不真的希望你的应用程序做大量的UI工作,而不管它是什么。

您的Activity类可以有private boolean needsUiUpdate = false;。然后,在onReceive()中,您可以设置needsUiUpdate = true;。最后,在你的活动onResume()中,你有类似的东西:

@Override
public void onResume() {
    if (needsUiUpdate) {
        doUiUpdates();
    }
}