关于后台服务的延迟通知

时间:2017-02-08 20:38:24

标签: java android android-studio service notifications

我正在做一个简单的服务,每隔10分钟下载一个WebPage(HTML代码),并通知用户是否有更改。现在,问题是前3-4个通知正确显示,但在此之后,通知之间存在重要延迟,有时它们无法到达。 这是我的代码: 的 Monitor.java

public void onCreate() {
    super.onCreate();

    customHandler = new android.os.Handler();
    customHandler.postDelayed(runnable, 0);


}

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        RUN = true;


        LINK = readMessage("ADDR");

        Ion.with(getApplicationContext()).load(LINK).asString().setCallback(new FutureCallback<String>() {
            @Override
            public void onCompleted(Exception e, String result) {
                Risultad = result;

                if (fileExists(getApplicationContext(), "AVV") == false)

                {
                    Savefile(Risultad, "AVV");
                    Intent i = new Intent(getApplicationContext(), MainActivity.class);
                    PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, 0);
                    NotificationManager notificationManager = (NotificationManager)
                            getSystemService(NOTIFICATION_SERVICE);
                    NotificationCompat.Builder n = new NotificationCompat.Builder(getApplicationContext())
                            .setContentTitle("First")
                            .setContentText(Risultad.toString())
                            .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                            .setVibrate(new long[]{2000})
                            .setContentIntent(pi)
                            .setAutoCancel(true)
                            .setSmallIcon(android.R.drawable.ic_dialog_email);
                    notificationManager.notify(0, n.build());
                }
                if (fileExists(getApplicationContext(), "AVV") == true)

                {
                    final String OldAvv = readMessage("AVV");


                    if (Risultad.equals(OldAvv + "\r\n") == false) {

                        Savefile(result, "AVV");
                        Intent i = new Intent(getApplicationContext(), MainActivity.class);
                        PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, 0);
                        NotificationManager notificationManager = (NotificationManager)
                                getSystemService(NOTIFICATION_SERVICE);
                        NotificationCompat.Builder n = new NotificationCompat.Builder(getApplicationContext())
                                .setContentTitle("Something happened")
                                .setContentText(result.toString())
                                .setContentIntent(pi)
                                .setAutoCancel(true)
                                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                                .setSmallIcon(android.R.drawable.ic_dialog_email);
                        notificationManager.notify(0, n.build());

                    }
                }


            }


        });
        customHandler.postDelayed(this, 300000);
    }

我正在使用Ion库下载页面。 readMessage,SaveFile和fileExist用于读取,保存或检查存储在设备上的HTML代码。

有时,我打开应用时会显示通知。

我可以做些什么来按时收到通知?

1 个答案:

答案 0 :(得分:0)

查看AlarmManager

  

这些允许您安排应用程序在将来的某个时间运行。当警报响起时,系统会广播已为其注册的Intent,如果目标应用程序尚未运行,则会自动启动它。设备处于休眠状态时会保留已注册的警报(如果设备在此期间关闭,则可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除设备。

     

注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此。对于正常的计时操作(刻度,超时等),使用Handler会更容易,也更有效。

有关详细信息和代码示例,请参阅this guide