android如何让service不被杀死

1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建
@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }----------------
  @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
                // TODO Auto-generated method stub
                Log.v("TrafficService","startCommand");
               
                flags =  START_STICKY;
                return super.onStartCommand(intent, flags, startId);
//                return  START_REDELIVER_INTENT;
        }
2.在Service的onDestroy()中重启Service.
public void onDestroy() {   
        Intent localIntent = new Intent();
        localIntent.setClass(this, MyService.class);  //销毁时重新启动Service
        this.startService(localIntent);
    }---------------------------------------------
用qq管家杀掉进程的时候,调用的是系统自带的强制kill功能(即settings里的),在kill时,会将应用的整个进程停掉,当然包括
service在内,如果在running里将service强制kill掉,显示进程还在。不管是kill整个进程还是只kill掉进应用的
service,都不会重新启动service。不知道你是怎么怎么实现重启的,实在是不解。。。
ps:在eclipse中,用stop按钮kill掉进程的时候,倒是会重启service
KILL问题:
1. settings 中stop service
onDestroy方法中,调用startService进行Service的重启。
2.settings中force stop 应用
捕捉系统进行广播(action为android.intent.action.PACKAGE_RESTARTED)
3. 借助第三方应用kill掉running task
提升service的优先级
--------------------------------------------
service开机启动

http://blog.csdn.net/flying_vip_521/article/details/7053355

  • 今天我们主要来探讨android怎么
    让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast
    Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广
    播接收者来接收这个这个action.下面我就来简单写以下实现的步骤:
  • 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。
    • import android.content.BroadcastReceiver;
    • import android.content.Context;
    • import android.content.Intent;
    • import android.util.Log;
    • public class BootBroadcastReceiver extends BroadcastReceiver {
    • //重写onReceive方法
    • @Override
    • public void onReceive(Context context, Intent intent) {
    • //后边的XXX.class就是要启动的服务
    • Intent service = new Intent(context,XXXclass);
    • context.startService(service);
    • Log.v("TAG", "开机自动服务自动启动.....");
    • //启动应用,参数为需要自动启动的应用的包名
    • Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
    • context.startActivity(intent );
    • }
    • }
  • 第二步:配置xml文件,在receiver接收这种添加intent-filter配置
  • <receiver android:name="BootBroadcastReceiver">
  • <intent-filter>
  • <action android:name="android.intent.action.BOOT_COMPLETED"></action>
  • <category android:name="android.intent.category.LAUNCHER" />
  • </intent-filter>
  • </receiver>
  • 第三步:添加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

---------------------------------------------------
如何实现一个不会被杀死的进程
看Android的文档知道,当进程长期不活动,或系统需要资源时,会自动清理门户,杀死一些Service,和不可见的Activity等所在的进程。
但是如果某个进程不想被杀死(如数据缓存进程,或状态监控进程,或远程服务进程),应该怎么做,才能使进程不被杀死。

add android:persistent="true" into the <application> section in your AndroidManifest.xml

切记,这个不可滥用,系统中用这个的service,app一多,整个系统就完蛋了。
目前系统中有phone等非常有限的,必须一直活着的应用在试用。

------------------------------------------------
提升service优先级的方法

Android
系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用。当系统觉得当前的资源非常有限的时候,为了保
证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存。这样就能保证真正对用户有用的程序仍然再运行。如果你的
Service 碰上了这种情况,多半会先被杀掉。但如果你增加 Service 的优先级就能让他多留一会,我们可以用
setForeground(true) 来设置 Service 的优先级。

  为什么是 foreground ? 默认启动的 Service 是被标记为 background,当前运行的 Activity 一般被标记为
foreground,也就是说你给 Service 设置了 foreground 那么他就和正在运行的 Activity
类似优先级得到了一定的提高。当让这并不能保证你得 Service 永远不被杀掉,只是提高了他的优先级。
  从Android 1.5开始,一个已启动的service可以调用startForeground(int,
Notification)将service置为foreground状态,调用stopForeground(boolean)将service置为
background状态。
  我们会在调用startForeground(int, Notification)传入参数notification,它会在状态栏里显示正在进行的foreground service。background service不会在状态栏里显示。
  在Android 1.0中,将一个service置为foreground状态:
  setForeground(true);
  mNM.notify(id, notification);
  将一个service置为background状态:
  mNM.cancel(id);
  setForeground(false);
  对比看出,在1.0
API中调用setForeground(boolean)只是简单的改变service的状态,用户不会有任何觉察。新API中强制将
notification和改变service状态的动作绑定起来,foreground service会在状态栏显示,而background
service不会。
  Remote service controller & binding
  跨进程调用Service。暂时不研究。
-------------------------------------------------------
如何防止Android应用中的Service被系统回收?         很多朋友都在问,如何防止Android应用中的Service被系统回收?下面简单解答一下。

对于Service被系统回收,一般做法是通过提高优先级可以解决,在AndroidManifest.xml文件中对于intent-filter可以
通过android:priority =
"1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时实用于广播,推荐大家如果你的应用很重要,可以考虑通过系统常用
intent action来触发。

时间: 2024-11-10 17:25:14

android如何让service不被杀死的相关文章

android如何让service不被杀死-提高进程优先级

1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; }---------------- @Override public int onStartCommand(Intent intent, int flags, int sta

Android Service 不被杀死并提高优先级

Android Service 不被杀死有两种思路,一种是将APP设置为系统应用.还有一种是增强service的生命力.即使屏幕背光关闭时也能执行. 因为设置为系统应用须要root.所以一般使用后一种方法: 1.Androidmanifest.xml权限许可:----------------------------------------------------------------- <uses-permission android:name="android.permission.W

Android学习总结——Service组件

从Service的启动方式上,可以将Service分为Started Service和Bound Service.在使用Service时,要想系统能够找到此自定义Service,无论哪种类型,都需要在AndroidManifest.xml中声明: <service android:name=".MyService"> 一:StartService方式启动服务 Started Service相对比较简单,通过context.startService(Intent servic

【Android】Kill Service

花了一天时间对如何Android保证Service不被杀死研究了一下,我的手机是Nexus5,系统4.4.2. 杀死一个Service通常有以下几种可能: 1)APP自己杀死(包括调用stopService等方法),以及因为使用bindService后context自己onDestory(): 2)第三方软件,比如360手机卫士,腾讯手机管家,猎豹清理大师等: 3)在"设置"-->"应用"-->"正在运行",找到应用后点击进去,停止S

Android学习之Service(1)---&gt;Started方式

界面退出后进程程序还在运行,不会被杀死,如音乐播发器.后台下载等 注:本文只讨论Started方式 main.xml代码分析 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

Android探索之Service全面回顾及总结

什么是Service? Service(服务)是Android提供的四大组件之一,是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行.为了方便记忆,我们可以把Service看做是没有页面的Activity,它总是默默的后台处理一些耗时的操作或者不干扰用户使用的后台操作,例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所

Android中保持Service的存活

这几天一直在准备考试,总算有个半天时间可以休息下,写写博客. 如何让Service keep alive是一个很常见的问题. 在APP开发过程中,需要Service持续提供服务的应用场景太多了,比如闹钟需要作出及时提醒,那么比如得有一个Service不断去比较当前时间和设置时间:QQ要能流畅的聊天,必然也需要及时接收消息等. 但是Android并没有保证Service有这样功能,毕竟一个系统面对的是用户,必然以对用户友好为先. 关于如何让Service keep alive,我在上篇博客给出的解

Android:远程服务Service(含AIDL &amp; IPC讲解)

前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service其中一种常见用法:远程Service 如果你对Service还未了解,建议先阅读我写的另外一篇文章: Android四大组件:Service史上最全面解析 目录 1. 远程服务与本地服务的区别 远程服务与本地服务最大的区别是:远程Service与调用者不在同一个进程里(即远程Service是运行在另外一个进程):而本地服务则是与调用者运行在同一个进程里 二者区别的详细区别如下图: 2. 使用场景 多个应用程

Android 双进程Service常驻后台,无惧“一键清理”

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 最近项目用到Service常驻后台,研究了一下发现手Q和微信都是使用了双进程来保证一键清理后自动复活,copy网上双进程Service的例子,再结合onTrimMemory(),基本实现一键清理后自动复活. 使用双进程Service,关键是在AndroidManifest.xml里面定义Service时加入android:process=":service1": <service andro