- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将项目中的 BroadcastReceiver 替换为 GcmNetworkManager。所以我读了一些教程并这样做:
1)在 list 中我添加:
<service android:name=".WakeOnLanService"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
</intent-filter>
</service>
2)服务:
public class WakeOnLanService extends GcmTaskService {
@Override
public int onRunTask(TaskParams taskParams) {
return GcmNetworkManager.RESULT_SUCCESS;
}
@Override
public int onStartCommand(Intent intent, int i, int i1) {
Toast.makeText(this,"Выполнилось",Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, i, i1);
}
}
3) Activity 安排:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GcmNetworkManager mGcmNetworkManager = GcmNetworkManager.getInstance(this);
Task task = new OneoffTask.Builder()
.setService(WakeOnLanService.class)
.setExecutionWindow(0, 2)
.setTag("MyTag")
.setUpdateCurrent(true)
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
.setRequiresCharging(false)
.build();
mGcmNetworkManager.schedule(task);
}
}
但这不起作用,Toast 未显示。如何正确执行此操作以及在互联网连接上使用 GcmNetworkManager 运行服务的最佳实践是什么(就像在广播接收器中一样)?
最佳答案
您不应在 onStartCommand
中运行代码。
相反,请使用onRunTask
。
@Override
public int onRunTask(TaskParams taskParams) {
Toast.makeText(this,"Выполнилось",Toast.LENGTH_SHORT).show();
return GcmNetworkManager.RESULT_SUCCESS;
}
来自documentation :
When the scheduler starts your service, a new thread is created and the system invokes onRunTask(). Implement the logic for your tasks by overriding onRunTask();
至于建立互联网连接时运行任务。最好不要这样做,除非你确实需要这样做。这就是这个任务的重点。安排您的任务与其他任务一起工作。如果您确实需要在建立互联网连接时触发它,则需要使用 BroadcastReceiver 并手动运行代码。您不能在任意时间触发此任务。
关于java - GcmTaskService 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39998368/
我想将项目中的 BroadcastReceiver 替换为 GcmNetworkManager。所以我读了一些教程并这样做: 1)在 list 中我添加:
我需要在 Android 应用程序的后台定期运行网络任务。 我最初打算使用 AlarmManager(不能使用 JobScheduler 因为它必须在 Lollipop 之前的设备上工作),但后来我遇
我正在尝试使用 GcmTaskService 实现服务。这是我在主要 Activity 中调用名为 Myservice 的服务的代码。 OneoffTask myTask = new OneoffTa
我正在尝试使用 GcmNetworkManager API(自 Google Play Services 7.5 起存在)实现一个 PeriodicTask。 我的任务在我的应用程序启动后立即安排,并
我有这段代码 GcmTaskService 服务代码,检查互联网是否可以在线推送一些数据: public class NetworkChangeService extends GcmTaskServi
我最近阅读了有关 GcmTaskService 和 GcmNetworkManager 来安排任务的信息。我的用例是典型的 SyncAdapter,我需要定期与我的服务器同步一些数据,我目前使用 Sy
我创建了一个非常简单的服务来更新服务器上的用户位置: public class LocationSchedulerService extends GcmTaskService { @Overr
我正在尝试在没有 waiting the 30 seconds 的情况下启动 GcmTaskService .如果任务不成功,则它应遵循通常的 GcmTask 规则。 but to prevent a
我们使用 GcmTaskService 将用户创建的实体异步上传到我们的服务器。 这对数千名用户来说没有任何问题,但对于至少两个用户来说,任务已计划但永远不会运行。 我们使用此代码来安排任务(sche
我设置了一个 periodicTask,每 60 秒左右运行一次。它应该只需要一两秒就可以运行,所以不太可能发生任何重叠,但如果之前的运行挂起或发生其他情况,我检测到这一点并跳过当前运行的最佳方法是什
背景 Google 有多种作业/任务调度解决方案,例如 JobScheduler和 GcmTaskService .每个都有自己的优点和缺点。 最近,Google 推出了一个名为“Firebase J
我是一名优秀的程序员,十分优秀!