博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-Service的保活方法
阅读量:5960 次
发布时间:2019-06-19

本文共 2614 字,大约阅读时间需要 8 分钟。

支持原文:http://tryenough.com/android-service-life

保活Service可从两方面考虑:

一.改变Service自身的方法

1.提高Service的优先级

在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播。

复制代码

2.在Service即将销毁的时候重新启动

支持原文:http://tryenough.com/android-service-life

可以直接在onDestroy()里startService

@Override	public void onDestroy() { 		 Intent sevice = new Intent(this, MainService.class);		 this.startService(sevice); 		super.onDestroy();	}复制代码

也可以用service +broadcast 方式启动:

onDestroy方法里重启service,当service走ondestory的时候,发送一个自定义的广播,当收到广播的时候,重新启动service;

//这个就是自定义的action
复制代码

在onDestroy时:

@Override	public void onDestroy() {		stopForeground(true);		Intent intent = new Intent("com.dbjtech.waiqin.destroy");		sendBroadcast(intent);		super.onDestroy();	}复制代码

在BootReceiver里

支持原文:http://tryenough.com/android-service-life

public class BootReceiver extends BroadcastReceiver { 	@Override	public void onReceive(Context context, Intent intent) {		if (intent.getAction().equals("com.dbjtech.waiqin.destroy")) {			//TODO			//在这里写重新启动service的相关操作				startUploadService(context);		} 	} }复制代码

3.onStartCommand方法,返回START_STICKY

@Override	public int onStartCommand(Intent intent, int flags, int startId) {		flags = START_STICKY;		return super.onStartCommand(intent, flags, startId);	}复制代码

4.提升service进程优先级 在onStartCommand方法内添加如下代码:

Notification notification = new Notification(R.drawable.ic_launcher,		 getString(R.string.app_name), System.currentTimeMillis());				 PendingIntent pendingintent = PendingIntent.getActivity(this, 0,		 new Intent(this, AppMain.class), 0);		 notification.setLatestEventInfo(this, "uploadservice", "请保持程序在后台运行",		 pendingintent);		startForeground(0x111, notification);复制代码

二.利用系统特性的方法

支持原文:http://tryenough.com/android-service-life

1.监听系统特殊事件

通过系统的一些广播,比如:手机重启、界面唤醒、应用状态改变等等监听并捕获到,然后判断我们的Service是否还存活,别忘记加权限啊。

复制代码

BroadcastReceiver中:

@Override	public void onReceive(Context context, Intent intent) {		if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {			System.out.println("手机开机了....");			startUploadService(context);		}		if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {				startUploadService(context);		}	}复制代码

2.特殊手机监听特殊推送,例如小米手机注册小米推送

支持原文:http://tryenough.com/android-service-life

转载于:https://juejin.im/post/5c80dee4e51d45282610e2cb

你可能感兴趣的文章
QQ把游戏放进聊天框,这一点Facebook和微信都没做到
查看>>
在线匿名之父意欲终结“加密战争”
查看>>
WLAN市场销量逐步逼近有线网络
查看>>
SDN市场或许进入了慢热期
查看>>
教你使用Linux系统的Shell脚本维护Oracle
查看>>
力龙信息布局大数据领域
查看>>
大数据巧治职业差评师 生存空间锐减九成
查看>>
天津开展免费无线局域网建设
查看>>
朝鲜最新消息|今天勒索病毒跟朝鲜黑客有关
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>
英国政府可能利用曼彻斯特自杀袭击要求互联网公司破解加密
查看>>
Mozilla 将大幅简化火狐浏览器的同步操作
查看>>
微软加大在 Edge/IE 浏览器上阻止 SHA-1 证书的力度
查看>>
龙芯将两款 CPU 核开源,这意味着什么?
查看>>
《51单片机应用开发从入门到精通》——导读
查看>>
PostgreSQL 锁解密
查看>>
snoopy 模拟表单提交(1)
查看>>
从软件技术演变到软件项目管理的进步
查看>>
云数据库与传统数据库有什么区别
查看>>
【Python之旅】第七篇(二):Redis使用基础
查看>>