android - 每天在应用未打开时运行代码

标签 android

我想每天(每 24 小时)运行一些代码。问题是如果用户不打开应用程序。如何在应用程序未打开时运行代码?

最佳答案

在 android 中运行后台周期性任务你可以使用多种方式,其中一些是:

  1. JobScheduler(仅适用于 API 21 或以上)

Android 已在 API 21 上为文档添加此类,此处为 link .

  1. JobSchedulerCompat - 用于 API 11 或更高版本的 JobScheduler 库的反向端口

您可以找到有关图书馆的所有信息 here .

  1. 使用报警管理器处理周期性任务

您还可以使用AlarmManager 来安排周期性任务。已发布实现它的完整文章 here .

  1. 使用 GCM(Google Cloud Messaging) Network Manager 安排周期性任务。

你可以看看这个文档link实现它。

使用 GCM 网络管理器的定期任务示例

在您的项目级 build.gradle 中添加依赖项。

compile 'com.google.android.gms:play-services-gcm:7.5.0'

创建一个扩展到GcmTaskService的java类

public class BackgroundTaskHandler extends GcmTaskService {

    public BackgroundTaskHandler() {
    }

    @Override
    public int onRunTask(TaskParams taskParams) {
         //Your periodic code here
    }
}

在manifest.xml中声明服务

    <service
        android:name=".BackgroundTaskHandler"
        android:exported="true"
        android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
        <intent-filter>
            <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
        </intent-filter>
    </service>

现在将任何类的周期性任务安排为:-

    String tag = "periodic";

    GcmNetworkManager mScheduler = GcmNetworkManager.getInstance(getApplicationContext());

    long periodSecs = 60L;// 1 minute

    PeriodicTask periodic = new PeriodicTask.Builder()
            .setService(BackgroundTaskHandler.class)
            .setPeriod(periodSecs)
            .setTag(tag)
            .setPersisted(true)
            .setUpdateCurrent(true).setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_CONNECTED)
            .build();
    mScheduler.schedule(periodic);

关于android - 每天在应用未打开时运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275418/

相关文章:

java - 使用 JSON 的 Volley Post - 获取 422 状态代码

android - Android Studio 中的意外顶级异常

android - 应用内计费 - 快速设备定位 - 导致崩溃(IllegalStateException)

java - 安卓浏览器地址栏

android - 使用 Visual Studio 进行跨平台移动应用程序开发的缺点

Android:RES 目录中除 ic_ 之外的文件前缀标准?

javascript - 在 Chrome PWA 中更改屏幕方向

android - 使用 Parse.com 登录 Facebook 时出现 NoClassDefFoundError

android - 当某些功能正在运行时,将一个应用程序锁定在最近使用的应用程序屏幕上(防止用户关闭它)

android - 在我的 Android NDK 应用程序中添加 libstagefright