我正在做一个简单的服务,每隔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代码。
有时,我打开应用时会显示通知。
我可以做些什么来按时收到通知?
答案 0 :(得分:0)
这些允许您安排应用程序在将来的某个时间运行。当警报响起时,系统会广播已为其注册的Intent,如果目标应用程序尚未运行,则会自动启动它。设备处于休眠状态时会保留已注册的警报(如果设备在此期间关闭,则可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除设备。
注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此。对于正常的计时操作(刻度,超时等),使用Handler会更容易,也更有效。
有关详细信息和代码示例,请参阅this guide