Kar*_*eek 4 service android broadcast broadcastreceiver android-jobscheduler
我正在开发一个应用程序,当设备连接到互联网时,它将在后台按顺序将我的所有数据库记录上传到服务器。
为此,我编写了一个BroadcastReceiver监听网络连接的程序。当这个接收器被触发时,我正在启动后台服务来上传记录。
这是我的代码。
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
AppUtils.checkInternetConnection(context));
//If the device has the internet connection and if there are any pending records to upload to server then start the service for uploading the records.
if (AppUtils.checkInternetConnection(context)) {
if (Database.getInstance().getTotalRecordsCount() > 0) {
context.startService(new Intent(context, SurveyUploadService.class));
}
} else {
context.stopService(new Intent(context, SurveyUploadService.class));
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的疑问是
1. 我可以使用JobScheduler做同样的事情吗?
2. 什么是更好的(我的或使用 JobScheduler 的)方法,为什么?
小智 5
我不知道您对 BroadcastReceiver 使用了哪个操作,但我想它是CONNECTIVITY_CHANGE操作。如果您使用它,请从侧面阅读以下有关Android 7.0 行为更改的文字:
为了缓解这些问题,Android 7.0 应用了以下优化:
面向 Android 7.0 的应用不会收到 CONNECTIVITY_ACTION 广播,即使它们有清单条目来请求这些事件的通知。如果正在运行的应用程序使用 BroadcastReceiver 请求通知,它们仍然可以在其主线程上侦听 CONNECTIVITY_CHANGE。
应用程序无法发送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 广播。此优化会影响所有应用,而不仅仅是针对 Android 7.0 的应用。
如果您的应用使用这些意图中的任何一个,您应该尽快删除对它们的依赖,以便您可以正确定位 Android 7.0 设备。Android 框架提供了多种解决方案来减少对这些隐式广播的需求。例如,JobScheduler API 提供了一种强大的机制,可以在满足指定条件(例如连接到未计量的网络)时调度网络操作。您甚至可以使用 JobScheduler 对内容提供程序的更改做出反应。
所以最好使用JobScheduler API。
这是JobScheduler 的一个例子。
| 归档时间: |
|
| 查看次数: |
6602 次 |
| 最近记录: |