永发信息网

如何让android的service一直在后台运行

答案:2  悬赏:0  手机版
解决时间 2021-02-05 02:34
如何让android的service一直在后台运行
最佳答案
Android的service一直运行的方法:

1、 Intent.ACTION_TIME_TICK的使用
我们知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。
在ThisApp extends Application 里注册广播:
IntentFilter filter = newIntentFilter(Intent.ACTION_TIME_TICK); MyBroadcastReceiver receiver = new MyBroadcastReceiver(); registerReceiver(receiver, filter);

在广播接收器MyBroadcastReceiver extends BroadcastReceiver的onReceive里
if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) { //检查Service状态 }

2、Service的检查与启动
boolean isServiceRunning = false; ActivityManager manager = (ActivityManager)ThisApp.getContext().getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo service :manager.getRunningServices(Integer.MAX_VALUE)) { if("so.xxxx.WidgetUpdateService".equals(service.service.getClassName())) //Service的类名 { isServiceRunning = true; } } if (!isServiceRunning) { Intent i = new Intent(context, WidgetUpdateService.class); context.startService(i); }

另一个话题,Service的开机启动。
实现和上边的类似,也是通过监控开机的系统广播来启动Service。但其实你做了上边的检查也就不会做开机启动了,因为过一两分钟就会通过上边的程序启动Service了。代码如下:
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent i = new Intent(context, LogService.class); context.startService(i); }
全部回答
1. 把service和activity分开,让service开机启动。设置一个broadcast receiver接受开机信号,使用receive_boot_completed的permission, 然后启动service。activity启动后绑定到service上,通过ipc机制通信,acitivity结束后松绑。注意安装后要手动启动service,不会自动启动,之后重启手机后才会随开机启动。 2. 在内存低的时候系统会自动清理进程,这时候后台service可能会被杀掉。可以在onstartcommand中返回start_sticky,这样系统有足够多资源的时候,就会重新开启service。 3. 以上不需要ndk,直接用sdk开发就可以了。 android 一直运行的后台服务是不存在的,而且也不是最佳实践,因为一直运行的后台服务会耗费大量系统资源,影响其他程序的响应从而影响到用户体验。 可以考虑使用如下几种方案来达到一直运行的效果。 1. 调用startforeground方法,android: service vs singletop activity moved to background 2. 使用alarmmanager 发送定时任务 : diamonds are forever. services are not. 我现在也遇到这个问题,我想楼主之所以出现这个问题的原因是,你在activitiy中创建的service运行在当前进程中,当你把这个activitiy的进程杀掉之后,自然这个服务也就停止了。 所以我的建议是在startservice的时候,让这个service运行在与该activity不同的进程中(可以startservice或者开机时创建一个新的进程)。实际上就是linux里面的进程操作。可以使用ndk开发,用c或者c++新建一个进程来运行自己的服务,并提高进程优先级,避免被清理掉(我猜测qq和微信的推送服务,或许是这么实现的)。 有一种做法是开两个进程来相互监督,一旦其中一个进程被停止,另一个检测到后,立即或稍后重启另一个进程。这里可以效仿这种做法。可以开两个进程,一个用来做前台,另一个负责运行服务,后者没有activity,由前者初始化并启动,这样,当前台进程被关闭时,服务并不被关闭
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
车险怎么买划算我是小型五菱货车怎么买保险,
正一道的意思是什么啊?知道的请说下!
阿国海鲜楼地址在什么地方,想过去办事
企业通过第三方公司贷款,公司该怎么进行账务
你说小米4C手机屏幕上边角角摔坏了下部分屏幕
腾鹤整体家装店地址有知道的么?有点事想过去
【由奶糖、水果糖、软糖、酥糖4种糖混合起来
笨榨豆油机器多少钱
下文的意思是什么啊?知道的请说下!
有一首老歌和永远放你在心底的曲调是一样的,
网娱网咖石器店怎么去啊,有知道地址的么
当归老鸭汤要放多少当归可以放酒吗?
成都蜀大侠火锅好吃嘛
智能手机怎么复制联系人到卡上
企业国际化经营所面对的外部环境有以下显著特
推荐资讯
庄河市吴炉镇孙堡幼儿园地址有知道的么?有点
机场属于哪类用地
什么样的人才有资格看到佛祖显示真身?
殡葬礼仪服务员的工作内容都有些什么,殡葬礼
阳东区交警大队塘坪中队怎么去啊,我要去那办
企业所得税法将内外资企业所得税税率统一为25
豪运家具城地址在哪,我要去那里办事
求问,联想G510怎么升级BIOS版本
目前中央企业82.8%资产集中在石油石化、电力
文艺范现代音乐教室怎么去啊,我要去那办事
快乐搬家保洁公司地址有知道的么?有点事想过
秦始皇创立了皇帝制度,从继承的角度看,该制
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?