安卓的service组件小结

      做安卓开发的应该都知道service这个组件,身为安卓四大组件之一,用法网上有很多,特的分类也很多,作为我自己开发中,其实用到的service也比较多,但是最近在开发中有个业务逻辑,需要service独立运行,即脱离activity的组件,发现用activity的startService启动service后,如果activity没有退出的话,可以一直运行,一旦activity消亡,这个service就会运行大约半个到一个小时间会不断地重新启动,好像发生异常,service会重新创建,走onCreat方法------等一系类生命周期,所以我有专门开出来一个新的进程为这个service,与原来的activity处于两个进程中,发现是同样的结果,按照api中说的,activity没有之后,service会不受影响,为什么会过一会不断重新创建这个service呢,经过长时间的翻阅文档,发现service的优先级问题,有可能是被安卓系统回收了,然后注意onStartCommand这个方法,这里面的参数很重要,可以去百度一下,这里不再详细说了,这个方法的返回值super.onStartCommand(intent, flags, startId)默认是1,什么意思呢,就是这个service不断重新创建的原因,他还有其他参数返回,可以设置是否重新创建这个service,和intent等问题。说了这么多,怎么解决呢,思路就是不让这个service终结掉,看了许多资料,也试了很多方法,关于微信的,各种app的一些网上介绍,最后采取使用NotificationManager通知方式让service运行在前台处startForeground,这个也不算是流氓方式,是官方给的一种方案。希望这篇文章能给类似有问题的同学提供帮助,下面是一些相关的代码,来把service置于前台工作

private void serviceNotify() {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder1 = new Notification.Builder(this);
builder1.setSmallIcon(R.drawable.icon); // 设置图标
builder1.setTicker("服务已开启");
builder1.setContentTitle("服务"); // 设置标题
builder1.setContentText("点击查看详细内容"); // 消息内容
builder1.setWhen(System.currentTimeMillis()); // 发送时间
builder1.setDefaults(Notification.DEFAULT_ALL); // 设置默认的提示音,振动方式,灯光
builder1.setAutoCancel(true);// 打开程序后图标消失
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
builder1.setContentIntent(pendingIntent);
Notification notification1 = builder1.build();
manager.notify(124, notification1); // 通过通知管理器发送通知
startForeground(1, notification1);
}

经测试,这个service能一直处于运行中,如各大音乐app模式差不多

阅读更多
换一批

没有更多推荐了,返回首页