进程保活参考:
https://www.jianshu.com/p/53c4d8303e19
https://github.com/08carmelo/android-keeplive
其实点击参考的链接里面说了技术点
以上地址这个我是通过鸿洋的公众号看到的,我们公司做的是VPN拨号必须要求的应用程序保持后台运行,上面链接中介绍的很详细,我的部分保活就用的上面说的,毕竟是鸿洋大神推荐出来的,我用的github上中使用的代码效果还是相对可以的
先说明一下保护进程的几个技术点
前台进程的优先级的最高的,所以在开发的过程中我们需要实现一个前台进程去保护app在后台运行,需要实现一个notification和services进行bind,类似音乐播放器那种
在7.1以下notification创建后不会再通知栏出现 这个前台进程就可以实现了 这个会在魅族和华为部分手机上面通知栏出现一个正在运行的notification,很多情况下 app的通知是被禁止的尤其的小米手机,需要申请通知权限。
8.0以上 notification就会显示出来然后我们可以在8.0以后使用JobScheduler进行保活操作,系统越高对app的耗电等性能都有要求,JobScheduler对耗电性能都是优化的
除了系统上面的一些处理还需要处理的是:在华为手机锁屏的时候app会被kill掉 这个时候我们需要使用广播监听锁屏,给屏幕中留下一个像素的view,保护进程不被kill,在上面的demo中就使用了这个,其实这些还是有问题的,除非你有钱和厂家合作,默认华为、oppo、魅族都开启锁屏就清理,你再怎么保护还是会清理
具体实现参考过的demo中已经实现 除了没有使用JobScheduler 我在下面会贴上JobScheduler实现代码
以上就是谈论到的几个技术点
使用后其实还是有很多手机会掉线的
尤其华为,OPPO,魅族(其他手机相对还是可以)
因为我们直接可以和学生打交道所以我们组织了一部分这种机型的学生手机测试发现是部分权限没有开启产生的问题
我们的客户端要求在后台保持一个连接让学生能够正常上网使用,若系统强制杀死会导致无法上网(问题很严重的)
我们要求学生开启手机以下权限
1,加入系统白名单
2,开启锁屏不清理(这个还要在应用里面使用广播监听锁屏留一个像素进程保护才可以)
3,耗电不清理”
如图4所示,允许后台运行
5,后台运行无限制
权限归权限我们还要在客户端中做适配就是上面链接中讲解的,演示中实现的毕竟除了这些特殊机型大部分都是可以的
还有一点重要的是应用程序内存的 内存一定要优化到最低
就是这块我使用几个类你可以从这里下载下来看https://github.com/08carmelo/android-keeplive
除了使用上面说到的,我在项目中还用了一个就是叫
JobScheduler(https://www.jianshu.com/p/1d4ebae39263)
import android.annotation.TargetApi;
import android.app.job.JobInfo;
import android.app.job.JobParameters;
import android.app.job.JobScheduler;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
import android.os.Build;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class TabService extends JobService {
@Override
public void onCreate() {
super.onCreate();
startJobSheduler();
}
@Override
public boolean onStartJob(JobParameters jobParameters) {
// logger.error("onStartJob");
return false;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
// logger.error("onStopJob");
return false;
}
public void startJobSheduler() {
try {
int id = 1;
JobInfo.Builder builder = new JobInfo.Builder(id,
new ComponentName(getPackageName(), TabService.class.getName() )
/* new ComponentName(TabService.this.getPackageName(),TabActivity.class.getName())*/
);
builder.setPeriodic(500); //间隔500毫秒调用onStartJob函数, 500只是为了验证
JobScheduler jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE);
assert jobScheduler != null;
int ret = jobScheduler.schedule(builder.build());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
客户端返回后台运行的代码
moveTaskToBack(false);
目前我研究了很多,什么网上说的守护进程,从Ç写,从这从那写的,我查过的网上所有方案我都测试了(而且还是找学生测试),都需要用户手动操作,如果你们足够牛那让手机厂商给你的应用内加入系统白名单就好了,安卓厂家多机型多每个都不一样,保持后台耗电耗性能,系统版本越来越高压根就不要求你后台运行,我们这个应用比较特殊学生想上网必须手动设置,而且这个我还整理了一封防止掉线的手机权限设置文档
<a href="http://jingyan.baidu.com/article/9faa72319f8093473c28cb85.html">加入手机系统白名单<br>(此要求必须设置如果帮助中没有您手机的设置介绍请自行百度)</a>
<br>
<br>
<a href="https://jingyan.baidu.com/article/d621e8da7c77532864913f55.html">0.华为安卓8.0 mate 10手机上网掉线设置</a>
<br><a
href="https://jingyan.baidu.com/article/0f5fb09902e5036d8334ea2d.html">1.Lenovo(联想)乐檬K3手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/e75057f2ebfbc7ebc91a89e8.html">2.Vivo XPlay6手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/5bbb5a1b01946813eaa17955.html">3.华为手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/17bd8e5221d88d85aa2bb855.html">3.OPPO手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/0bc808fc56e3bf1bd485b9a3.html">4.魅族手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/49ad8bce4295415834d8faa2.html">5.ViVO手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/60ccbceb51de3d64cbb19756.html">6.小米手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/e9fb46e16cc1667521f76633.html">6.三星手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/ff42efa9da45f9c19e2202f2.html">7.一加手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/album/20b68a88a1c96e796dec6255.html">8.联想手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/album/fcb5aff7ae1428edaa4a71bc.html">9.魅族手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/76a7e409fd267dfc3b6e1589.html">10.朵唯手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/48b558e324e7bf7f39c09a55.html">11.酷派手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/37bce2be6fc4831002f3a22e.html">12.金立(gionee) M6手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/d8072ac4957828ec95cefd80.html">13.Vivo X5m手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/f71d6037a59b291ab641d126.html">14.联想Lenovo A806手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/fec7a1e5e30b071190b4e7da.html">15.华硕ASUS Z00ADB手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/e73e26c08b305324adb6a705.html">16.OPPO R9S手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/19020a0a15f572529c284255.html">17.Letv(乐视)手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/b7001fe1b7bdd60e7282dd97.html">18.三星C9手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/e9fb46e16cc1667521f76633.html">19.三星Galaxy S4手机上网掉线设置</a>
<br>
<a href="https://jingyan.baidu.com/article/c275f6ba3d3d57e33c75674d.html">20.华为P9上网掉线设置</a>
以上就是我这两年实践的结果
使用链接中的东西也就才半年不过效果还可以,之前使用的也差不多但是效果不是很好。
希望对你有帮助