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

\u5982\u4f55\u8ba9android\u7684service\u4e00\u76f4\u5728\u540e\u53f0\u8fd0\u884c

\u53ef\u4ee5\u4f7f\u7528\u5e7f\u64ad\u63a5\u6536\u8005\u6765\u5b9e\u73b0service\u4e00\u76f4\u5728\u540e\u53f0\u8fd0\u884c\uff0c\u5373\u670d\u52a1\u5982\u679c\u88abkill\u5c31\u7528BroadcastReceiver\u91cd\u65b0\u542f\u52a8\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6765\u5b9e\u73b0service\u4e00\u76f4\u5728\u540e\u53f0\u8fd0\u884c\u7684\u3002
\u5b9e\u73b0\u4ee3\u7801\uff1a
1.\u5728\u914d\u7f6e\u6587\u4ef6AndroidManifest.xml\u4e2d\u5411\u7cfb\u7edf\u6ce8\u518cBroadcastReceiver





2.\u9700\u8981\u6dfb\u52a0\u76f8\u5e94\u6743\u9650


3.\u5728Receiver\u4e2d\u5c31\u53ef\u4ee5\u6dfb\u52a0\u5f00\u673a\uff0c\u6216\u8005\u7f51\u7edc\u72b6\u6001\u6539\u53d8\u540e\u9700\u8981\u8fdb\u884c\u7684\u64cd\u4f5c
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

}
}
4.\u6267\u884c\u64cd\u4f5c\uff0cIntent intent = new Intent(context,Service.class); context.startService(intent); \u8fd9\u6837\u5373\u53ef\u4e00\u76f4\u4fdd\u62a4Service\u5728\u540e\u53f0\u8fd0\u884c\u4e86\u3002

Android\u5f00\u53d1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6bcf\u6b21\u8c03\u7528startService(Intent)\u7684\u65f6\u5019\uff0c\u90fd\u4f1a\u8c03\u7528\u8be5Service\u5bf9\u8c61\u7684onStartCommand(Intent,int,int)\u65b9\u6cd5\uff0c\u7136\u540e\u5728onStartCommand\u65b9\u6cd5\u4e2d\u505a\u4e00\u4e9b\u5904\u7406\u3002\u7136\u540e\u6211\u4eec\u6ce8\u610f\u5230\u8fd9\u4e2a\u51fd\u6570\u6709\u4e00\u4e2aint\u7684\u8fd4\u56de\u503c

\u4eceAndroid\u5b98\u65b9\u6587\u6863\u4e2d\uff0c\u6211\u4eec\u77e5\u9053onStartCommand\u67094\u79cd\u8fd4\u56de\u503c\uff1a
START_STICKY\uff1a\u5982\u679cservice\u8fdb\u7a0b\u88abkill\u6389\uff0c\u4fdd\u7559service\u7684\u72b6\u6001\u4e3a\u5f00\u59cb\u72b6\u6001\uff0c\u4f46\u4e0d\u4fdd\u7559\u9012\u9001\u7684intent\u5bf9\u8c61\u3002\u968f\u540e\u7cfb\u7edf\u4f1a\u5c1d\u8bd5\u91cd\u65b0\u521b\u5efaservice\uff0c\u7531\u4e8e\u670d\u52a1\u72b6\u6001\u4e3a\u5f00\u59cb\u72b6\u6001\uff0c\u6240\u4ee5\u521b\u5efa\u670d\u52a1\u540e\u4e00\u5b9a\u4f1a\u8c03\u7528onStartCommand(Intent,int,int)\u65b9\u6cd5\u3002\u5982\u679c\u5728\u6b64\u671f\u95f4\u6ca1\u6709\u4efb\u4f55\u542f\u52a8\u547d\u4ee4\u88ab\u4f20\u9012\u5230service\uff0c\u90a3\u4e48\u53c2\u6570Intent\u5c06\u4e3anull\u3002
START_NOT_STICKY\uff1a\u201c\u975e\u7c98\u6027\u7684\u201d\u3002\u4f7f\u7528\u8fd9\u4e2a\u8fd4\u56de\u503c\u65f6\uff0c\u5982\u679c\u5728\u6267\u884c\u5b8conStartCommand\u540e\uff0c\u670d\u52a1\u88ab\u5f02\u5e38kill\u6389\uff0c\u7cfb\u7edf\u4e0d\u4f1a\u81ea\u52a8\u91cd\u542f\u8be5\u670d\u52a1\u3002
START_REDELIVER_INTENT\uff1a\u91cd\u4f20Intent\u3002\u4f7f\u7528\u8fd9\u4e2a\u8fd4\u56de\u503c\u65f6\uff0c\u5982\u679c\u5728\u6267\u884c\u5b8conStartCommand\u540e\uff0c\u670d\u52a1\u88ab\u5f02\u5e38kill\u6389\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u91cd\u542f\u8be5\u670d\u52a1\uff0c\u5e76\u5c06Intent\u7684\u503c\u4f20\u5165\u3002
START_STICKY_COMPATIBILITY\uff1aSTART_STICKY\u7684\u517c\u5bb9\u7248\u672c\uff0c\u4f46\u4e0d\u4fdd\u8bc1\u670d\u52a1\u88abkill\u540e\u4e00\u5b9a\u80fd\u91cd\u542f\u3002

\u73b0\u5728\u7684\u5b89\u5353\u624b\u673a,\u53ea\u8981\u4e00\u957f\u6309home\u952e,\u901a\u5e38\u90fd\u4f1a\u5217\u51fa\u8fd1\u671f\u4efb\u52a1,\u8fd9\u91cc\u53ef\u4ee5\u5e72\u6389\u6240\u6709\u8fdb\u7a0b
\u6240\u4ee5\u4e00\u76f4\u4e0d\u65ad\u7684\u5728\u540e\u53f0\u8fd0\u884c\u662f\u4e0d\u884c\u7684,\u4f46\u662f\u4f60\u53ef\u4ee5\u901a\u5e38\u5e7f\u64ad\u6765\u6fc0\u6d3b\u4f60\u7684service

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);
}

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

  • 濡備綍瀹炵幇android鍜屾湇鍔″櫒闀胯繛鎺
    绛旓細1.涓绉嶆槸瀹氭椂鍘籹erver鏌ヨ鏁版嵁锛岄氬父鏄娇鐢℉TTP鍗忚鏉ヨ闂畐eb鏈嶅姟鍣紝绉癙olling锛堣疆璇級锛2.杩樻湁涓绉嶆槸绉诲姩绔拰鏈嶅姟鍣ㄥ缓绔嬮暱杩炴帴锛屼娇鐢╔MPP闀胯繛鎺ワ紝绉癙ush锛堟帹閫侊級銆備粠鑰楄垂鐨勭數閲忋佹祦閲忓拰鏁版嵁寤惰繜鎬у悇鏂归潰鏉ヨ锛孭ush鏈夋槑鏄剧殑浼樺娍銆備絾鏄娇鐢≒ush鐨勭己鐐规槸锛氬浜庡鎴风锛氬疄鐜板拰缁存姢鐩稿鎴愭湰楂橈紝鍦ㄧЩ鍔ㄦ棤绾跨綉缁...
  • 濡備綍瀹炵幇android鍜屾湇鍔″櫒闀胯繛鎺
    绛旓細1锛android瀹㈡埛绔氳繃service鍦ㄥ悗鍙伴氳繃servreScoket涓嶆柇鐨刟ccept锛屼竴鏃︽湁鐩稿簲鐨剆ocket鍒拌揪锛屽垯鍚姩涓涓嚎绋嬪幓澶勭悊 2:锛氬湪绾跨▼涓鐞嗗畬杩斿洖缁欐垜浠琣ndroid瀹㈡埛绔殑娑堟伅鎴栦换鍔′箣鍚庯紝瑕灏杩欑缁撴灉琛ㄧ幇鍦╱i涓婏紝杩欎釜姝ラ鏂规硶灏辨瘮杈冨浜嗭紝渚嬪浣犲彲浠ュ彂涓涓箍鎾潵閫氱煡ui,鎴栬呬綘鍙互閫氳繃涓涓猻tatic鐨刪andler鏉ュ鐞 ser...
  • Android閫氫俊鏂瑰紡绡(涓)-Binder鏈哄埗(Native灞(涓))
    绛旓細9 binder_thread_write 褰揵wr鍐欑紦瀛樻湁鏁版嵁锛屽垯鎵цbinder_thread_write锛涘綋鍐欏け璐ュ垯灏bwr鏁版嵁鍐欏洖鐢ㄦ埛绌洪棿骞堕鍑猴紱10 binder_transaction 鎵惧埌鐩爣杩涚▼binder_proc骞舵彃鍏ユ暟鎹埌鐩爣杩涚▼鐨勭嚎绋媡odo闃熷垪锛屾渶缁堟墽琛屽埌瀹 鏃讹紝灏嗗彂璧风鏁版嵁鎷疯礉鍒版帴鏀剁杩涚▼鐨刡uffer缁撴瀯浣擄紱11 binder_thread_read 鏍规嵁binde...
  • android 涓 startService(intent) 涓轰粈涔堜笉鎵цservice鐨刼nStartCom...
    绛旓細浣犲彧鏄畝鍗曠殑娉ㄥ唽浜<service android:name="com.Sevices.mqtt.ReceivingMessageService"/> 骞舵病鏈夌粰杩欎釜service璧蜂釜鍚嶅瓧锛屾墍浠ntent intent = new Intent("com.Sevices.mqtt.ReceivingMessageService");杩欐牱璋冪敤鏄惎鍔ㄤ笉浜嗕綘鐨剆ervice鐨勶紝璇锋敼涓虹被浼煎涓嬶細Intent intent = new Intent(MainActivity.this,com...
  • 濡備綍瀹炵幇android鍜屾湇鍔″櫒闀胯繛鎺
    绛旓細1锛android瀹㈡埛绔氳繃service鍦ㄥ悗鍙伴氳繃servreScoket涓嶆柇鐨刟ccept锛屼竴鏃︽湁鐩稿簲鐨剆ocket鍒拌揪锛屽垯鍚姩涓涓嚎绋嬪幓澶勭悊2:锛氬湪绾跨▼涓鐞嗗畬杩斿洖缁欐垜浠琣ndroid瀹㈡埛绔殑娑堟伅鎴栦换鍔′箣鍚庯紝瑕灏杩欑缁撴灉琛ㄧ幇鍦╱i涓婏紝杩欎釜姝ラ鏂规硶灏辨瘮杈冨浜嗭紝渚嬪浣犲彲浠ュ彂涓涓箍鎾潵閫氱煡ui,鎴栬呬綘鍙互閫氳繃涓涓猻tatic鐨刪andler鏉ュ鐞***s...
  • android servrice閲岃兘杩涜缃戠粶璇锋眰鍚
    绛旓細鍙互鐨勶紝鍙槸寤鸿鍙戣姹傜殑鏃跺欏崟鐙紑绾跨▼銆係ervice榛樿鏄湪涓荤嚎绋嬩笂璺戠殑銆傚浜嶩TTP鎴栬匟TTPS鐨勮姹傦紝璋冪敤HttpURLConnection绫绘垨鑰匟ttpsURLConnection绫诲氨琛
  • androidremoteservice瀹夎澶辫触
    绛旓細鏂瑰紡濡備笅锛1銆佹竻鍗曟枃浠朵腑娌℃湁鍔爏ervice瀛楁锛屽嵆渚縮ervice鏄痡ar鍖呬腑鐨勶紝涔熼渶瑕佸湪娓呭崟鏂囦欢涓敞鍐屻2銆佽繙绋嬫湇鍔℃病鏈夊惎鍔紝鍦Android涓紝褰撴垜浠法杩涚▼鍚姩鎴栬呯粦瀹氫竴涓猄ervice锛屽綋鏃朵笉鑳戒繚璇佺涓娆″氨鑳芥垚鍔燂紝姣斿锛岃繙绋鐨凷ervice杩樻病璧峰惎鍔ㄦ垚鍔燂紝闇瑕佽繃涓娈垫椂闂存墠琛岋紝褰撴病鏈夌粦瀹氭垚鍔熷悗锛屾垜浠氳繃aidl鏉ヨ皟鐢≧emot...
  • 鎵嬫満濡備綍涓嶧TP鏈嶅姟鍣ㄥ缓绔嬭繛鎺
    绛旓細1銆佸畨鍗撶郴缁熷彲浠ヤ笅杞斤細Android FTP 2銆佽嫻鏋滄墜鏈哄氨涓嬭浇锛欶TP绮剧伒 琛ュ厖锛欶TP鏄氨鏄枃浠朵紶杈撳崗璁殑缂╁啓锛屾槸缃戠粶涓婁紶杈撴枃浠剁殑鍩烘湰鍜岀畝娲佺殑鏂瑰紡锛屼粬瑕佹眰鏈変竴涓湇鍔$鍜屼竴涓鎴风锛屾彁渚涙枃浠跺瓨鏀剧殑鍦版柟灏辨槸鏈嶅姟绔紝杩涜鏂囦欢鎿嶄綔鐨勬槸瀹㈡埛绔傛墍浠ワ紝浣犲鏋滆鐢‵TP鐨勬柟寮忚仈閫氱數鑴戝拰鎵嬫満锛屽墠鎻愬繀椤讳繚璇佷粬浠湪涓涓...
  • 濡備綍鍚姩涓涓home鐨android搴旂敤绋嬪簭
    绛旓細杩欎釜鍑芥暟瀹氫箟鍦╢rameworks/base/services/java/com/android/server/SystemServer.java鏂囦欢涓紝鍏蜂綋鍙互鍙傝冨墠闈竴绡囨枃绔Android搴旂敤绋嬪簭瀹夎杩囩▼婧愪唬鐮佸垎鏋愮殑Step 6銆係tep 7. ActivityManagerService.main 杩欎釜鍑芥暟瀹氫箟鍦╢rameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java鏂囦欢涓細[...
  • sync serviec 鎵嬫満鍑虹幇杩欎釜璋ㄦ厧鏂囦欢,鍙堜笉鑳藉鐞,鎬庝箞瑙e喅?
    绛旓細3.SIM鍗′笂瀛樺偍鐨勪俊鎭棶棰樸4.姣斿鍒犻櫎浜嗙郴缁熷繀澶嘺pk锛屾垨鑰呮槸鏇挎崲浜嗕笉鍚岀増鏈殑apk锛屽鑷寸殑閿欒銆傚缓璁寜鐓т互涓嬫柟娉曟搷浣滐細1.鎵嬫満涓槸鍚﹀畨瑁呮墜鏈哄畨鍏ㄥ崼澹蒋浠舵垨鑰呬竴浜涚涓夋柟杞欢绋嬪簭锛屽鏋滄湁璇峰嵏杞藉皾璇曘2.寤鸿鎶婃満鍣ㄦ仮澶嶅嚭鍘傝缃紝鎿嶄綔濡備笅锛氳缃-閲嶇疆/闅愮鏉/绉佷汉-鎭㈠鍑哄巶 3.寤鸿鍥轰欢鍗囩骇灏濊瘯銆傦紙璁剧疆-鍏充簬...
  • 扩展阅读:android系统下载安装 ... 直接下载app安装 ... android安卓版下载 ... android6.0下载官网 ... 苹果android怎么设置 ... android在哪里打开 ... android苹果下载安装 ... 苹果android在哪里找 ... android emulator ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网