应用程序打开时如何获取服务器更新?

时间:2012-05-29 08:36:11

标签: android android-asynctask android-c2dm android-networking

嘿,这可能被问过几次,但我似乎无法找到它。

Androids C2DM服务允许在应用程序不活动时向其发送消息吗? 因此从服务器发送通知很有用。 问题是,当用户使用该应用程序并且有更新时 从服务器,我应该如何通知他?我可以使用刷新按钮,但我不愿意。

所以我的问题是如何才能实现?

如果用户在线,C2DM服务如何运作?是否可以正常处理该事件以更新内容?

或者我应该使用某种后台线程/ AsyncTask / Service?我不确定哪一个适合这项任务。

从逻辑上讲,每隔几秒就用http请求到达服务器似乎效率低下,所以如果可能的话,C2DM似乎是更好的选择。

对此事的任何想法?

1 个答案:

答案 0 :(得分:2)

Androids C2DM服务允许向应用程序发送消息,无论应用程序是否处于活动状态。 也就是说,即使用户当前正在使用该应用,该设备也可以接收消息,或者该应用正在后台运行。

当您收到来自C2DM服务器的消息时,首先检查您的C2DMReceiver类,如果您的应用程序在后台运行,如果是,则在通知(状态栏)中显示消息,否则您可以通过Toast或AlertDialog显示消息框。

以下代码可以检查App是否在后台运行:

public static boolean isApplicationInBackground(final Context context) {
        final ActivityManager am = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        final List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            final ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }
        return false;
    }

谢谢:)