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

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

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

Android C2DM 服务允许在应用程序未激活时向其发送消息,对吗? 所以从服务器发送通知很有用。 问题是,当用户正在使用该应用程序并且有更新时 从服务器上,我应该怎么通知他?我可以使用刷新按钮,但我宁愿不使用。

所以我的问题是如何实现这一点?

如果用户在线,C2DM 服务如何运作?它的工作原理是否相同?我可以只处理该事件来更新内容吗?

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

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

有什么想法吗?

最佳答案

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

当您收到来自 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;
    }

谢谢你:)

关于android - 如何在应用程序打开时获取服务器更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795689/

相关文章:

Android SupportMapFragment 没有创建 View 报错

android - 如何获取android TextView的默认文本颜色?

android - AsyncTask 问题

android - 使asynctask运行得更快

android - 在不使用 C2DM 的情况下在 Android 上发送推送通知

android - 如何将应用程序注册到 C2DM

android - 是否可以创建一个 Android 应用程序来使手机以 kiosk 模式运行?

android - 安装应用程序时创建初始 SQLiteDatabase

android - AsyncTask 和 Progressbar

android - 在 android 中发送推送通知