androidservice常驻
Ⅰ 如何让android的service一直在后台运行
Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要的任务。而一些安全软件,会有结束进程的功能,如果不做Service的保持,就会被其杀掉。
如何保持Service的运行,其核心就是利用ANDROID的系统广播,这一不会被其他软件影响的常驻程序触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。
利用的系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动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);
}
Ⅱ androidservice已停止运行
首先我们可以尝试清理该APP的缓存数据。依次进入“设置→应用程序→全部”,找到并点击该APP的图标,在应用信息界面中选择“清除数据”以及“清除缓存”,再重新运行该APP即可。此外,如果某款APP只是偶尔会出现“应用程序停止运行”报错提示,则可能是系统内存不足引起的,这样的情况一般经常出现在1GB RAM手机上,运行前清理后台程序就可以了。
Ⅲ 释放内存时怎样确保小米手环一直在后台运行
释放内存时怎样确保小米手环一直在后台运行
释放内存时为了确保小米手环一直在后台运行,可按如下步骤进行:
-
在手机中运行小米手环,
-
返回桌面,确保小米手环此时正在后台运行,
-
长按home键,此时会出现后台运行的程序,
-
往下拖一下小米手环,放手,此时图标的右上角会出现一个锁形,
-
此时释放内存时小米手环依然可以在后台运行。
如何让android的service一直在后台运行
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有一个int的返回值
从Android官方困行文档中,我们知道onStartCommand有4种返回值:
START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
现在的安卓手机,只要一长按home键,通常都会列出近期任务,这里可以干掉所有进程
所以一直不断的在后台运行是不行的,但是你可以通常广播来激活你的service
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开发就可以了。
1、设置成前台的服务,在通知栏常驻
2、定时检测Service是否存在,不存在就开启
在oncreate()方法中添加一句startForeground(Process.myPid(), n);即可
Android开发的过程中,每次调用startService(Intent)的时候,都会调吵尺团用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有一个int的返回值 从Android官方文档中,我们知道onSt...
你不关机,不退出程序,不使用QQ管家,360等清理软件,service就一直在后台运行。安卓是真后台,不同于苹果的假后台。
Ⅳ 濡备綍璁〢ndroid Service涓嶈娓呴櫎鎴栬呭父椹诲唴瀛
浣犲彲浠ュ湪service镄刼ndestroy閲岄溃鍐嶆″惎锷锛屾垨钥呯洃钖镓嬫満灞忓箷鍙桦寲锛屽彧瑕佹搷浣沧坠链轰綘灏卞啀娆″惎锷ㄦ湇锷