在我的AndroIDManifest.xml中,我有:
<service androID:name=".services.MyService" 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>
在我的申请中,我有:
long periodSecs = 30L; // the task should be executed every 30 secondslong flexSecs = 15L; // the task can run as early as -15 seconds from the scheduled timeString tag = "myScan|1";PeriodicTask periodic = new PeriodicTask.Builder() .setService(MyService.class) .setPeriod(periodSecs) .setFlex(flexSecs) .setTag(tag) .setPersisted(false) .setrequiredNetwork(com.Google.androID.gms.gcm.Task.NETWORK_STATE_ANY) .setRequiresCharging(false) .setUpdateCurrent(true) .build();GcmNetworkManager.getInstance(this).schedule(periodic);
我有MyService,看起来像:
public class MyService extends GcmTaskService { @OverrIDe public int onRunTask(TaskParams taskParams) { Log.info("onRunTask: " + taskParams.getTag()); return GcmNetworkManager.RESulT_SUCCESS; } @OverrIDe public int onStartCommand (Intent intent,int flags,int startID) { Log.info("onStartCommand"); return GcmTaskService.START_STICKY_COMPATIBIliTY; }}
当我启动应用程序时,我按预期记录onStartCommand,但onRunTask永远不会被调用.我错过了什么吗?我期待,一旦启动(由启动命令触发证明),它应该每15-30秒运行一次 – 这是一个正确的假设吗?为什么不开火呢?
谢谢!
解决方法 问题是你正在重写onStartCommand!这就是Google Play服务在GcmTaskService上执行任务的方式.如果你想让它简单地工作
return super.onStartCommand(intent,flags,startID);
也许值得一提的是提供onRunTask的原因是你不必担心服务的生命周期 – 你可以依赖GcmTaskService的内部来在需要时停止服务.
也就是说,如果你使用自定义意图在你的GcmTaskService上启动Service(),你可能会搞砸了它,并最终得到一个应该没有停止的服务.
如果你确实需要调用GcmTaskService(不推荐),你应该绑定它 – 该接口完全不受GcmTaskService内部的影响.
总结以上是内存溢出为你收集整理的android – GCM网络管理器 – 周期性任务未触发全部内容,希望文章能够帮你解决android – GCM网络管理器 – 周期性任务未触发所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)