【问题标题】:From where to launch AlarmManager?从哪里启动 AlarmManager?
【发布时间】:2016-03-08 19:48:07
【问题描述】:

我尝试让应用程序定期向服务器报告,并且我希望在安装应用程序后开始。我的问题是从哪里启动 AlarmManager?

【问题讨论】:

  • 在您的应用打开时或在任何时候即使您的应用尚未启动也向服务器报告?
  • 任何时候,即使是关闭的应用程序。

标签: android multithreading asynchronous android-asynctask alarmmanager


【解决方案1】:

如果您想在应用程序启动后立即设置警报,您可以在 Application 课程中进行。为此创建一个类,假设MyApplication 扩展Application 类,并在其onCreate() 方法中设置您的警报。 onCreate() 将在您启动应用程序的新实例时立即调用。

public class MyApplication extends Application {

   @Override
    public void onCreate() {
      //Set Alarm here
   }
}

要告诉 Android 运行时 MyApplication 是您的应用程序类,请更改应用程序的清单文件:

<application
        android:name="<your_package_name>.MyApplication"
....
>

【讨论】:

  • 您好,感谢您的回答。 onCreate() 方法在运行时有吗?安装应用后还是要激活应用?
  • onCreate () 在您第一次启动应用程序时和/或在它被杀死后重新启动时被调用。
  • 什么时候认为应用被杀死了?我要发送数据的任务,应用不能被杀死。
  • 该应用程序可能由于多种原因而被终止,例如当您从最近的应用程序列表中删除它时,当您强制停止它时,当您的应用程序处于后台并且其他前台应用程序需要内存时,Android 会运行 GC 并终止您的应用程序,以便前台活动的应用程序获得内存以防万一.
  • 我发现你的想法很有效。虽然我现在正在为另一个问题苦苦挣扎,我给了一个间隔为 1 分钟的 AlarmManager,但这个延迟为 5 分钟来响应。你能想象可能是什么问题吗?
【解决方案2】:

使用broadcast receiver 监听

android.intent.action.BOOT_COMPLETED

意图。

使用广播接收器onReceive 方法设置您的闹钟。

请注意,这需要

android.permission.RECEIVE_BOOT_COMPLETED

【讨论】:

  • 您好,感谢您的回答,但这不是解决方案。每次打开设备时都会释放它。我的意图是在安装应用程序后发出警报。
  • 在用户第一次专门启动您的应用程序之前,Android 系统会阻止您的代码运行。您将第一次在应用程序中启动闹钟,但由于每次设备重新启动时都会删除闹钟,所以您将使用我回答中的方法重新设置它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 2012-06-19
相关资源
最近更新 更多