当前位置: 首页 > 知识库问答 >
问题:

定期调用Android服务[GoodApporach?]

堵毅然
2023-03-14

我的要求是

Android应用程序必须发送用户位置详细信息(纬度

我采用的方法是使用报警管理器,我以配置的间隔调用我的服务,无论应用程序是否正在运行,它都将向服务器发送位置详细信息。

这是一个好方法吗?

共有3个答案

欧奇希
2023-03-14

Android服务运行在UI线程上,所以你不应该在其中执行长时间运行的任务,比如向服务器发送数据。您可以使用ScheduledThreadPoolExecutor或AlarmManager来调度和使用asynctask或任何其他后台线程向服务器发送数据

谢承
2023-03-14

是的,使用AlrmManager是一个不错的方法。

报警管理器适用于您希望应用程序代码在特定时间运行的情况,即使您的应用程序当前没有运行。对于正常的计时操作(滴答、超时等),使用Handler更容易也更有效。

请参考此 https://developer.android.com/training/scheduling/alarms.html

欧阳勇
2023-03-14

我更喜欢ScheduledExecutorService,因为它更容易处理后台任务。

报警管理员:

只要报警接收器的onReceive()方法正在执行,报警管理器就会保持CPU唤醒锁定。这保证了在您完成广播处理之前,手机不会Hibernate。一旦onReceive()返回,报警管理器将释放此唤醒锁。

计划线程池执行器:

可以使用 java.util.Timer 或“计划线程池演示程序”(首选)来计划在后台线程上定期执行操作。

你可以在这里看到完整的答案=

    ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
    scheduler.scheduleAtFixedRate(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
           // Hit WebService
        }
    }, 0, 1, TimeUnit.HOURS);
 类似资料:
  • Ble是广告,在BluetoothGattServer中添加广告数据,广告完成,设备连接。在连接之后,也调用discoverServices(),但是没有发现服务,即没有触发onserviceinstovered()回调。 //回调以处理所有Gatt客户端连接以处理读写请求 //广告数据 //日志总结 `//服务uuid和特性uuid将进入广告数据{onGetService()-device=65

  • 我有一个android应用程序,将跟踪用户的位置。它被设置为使用WiFi/网络位置服务,如果可能的话,否则使用GPS_PROVIDER服务。当有wifi连接时,它工作得很好,但当我设置只从GPS获取位置时,应用程序崩溃了。通过测试,我得到了行location=locationmanager.getlastknownlocation(locationmanager.gps_provider);实际上

  • 在异步HTTP SERVER中使用服务 全局方法service_center() 使用service_center($service)获取服务地址,然后使用call()方法调用公开的服务方法 $service = (yield service_center('User')); $user = (yield $service->call("User::getUser", ['id'

  • 本文向大家介绍Android 服务的生命周期,包括了Android 服务的生命周期的使用技巧和注意事项,需要的朋友参考一下 示例 服务生命周期具有以下回调 onCreate() : 在首次创建服务以设置您可能需要的初始配置时执行。仅在服务尚未运行时才执行此方法。 onStartCommand() : 每次执行startService()都由另一个组件(例如Activity或BroadcastRec

  • 本文向大家介绍Android 定义服务流程,包括了Android 定义服务流程的使用技巧和注意事项,需要的朋友参考一下 示例 该android:process字段定义了要在其中运行服务的进程的名称。通常,应用程序的所有组件都在为该应用程序创建的默认进程中运行。但是,组件可以使用其自己的进程属性覆盖默认值,从而使您可以将应用程序分布在多个进程中。 如果分配给该属性的名称以冒号(':')开头,则该服务

  • 我正在使用AlarmManager,如下所示,它在Android O及以下版本中运行良好。 但在Android P中,我在Logcat中得到以下错误: 不允许后台启动:服务意图{flg=0x4 cmp=com.app.appname/.PeriodicChecksService(具有额外功能)}到com。应用程序。记录器/。来自pid的PeriodicChecksService=-1 uid=10