精华内容
下载资源
问答
  • 从三个层面入手:A:提供进程优先级,降低进程被杀死的概率方法一:监控手机锁屏解锁事件,在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉。方法二:启动前台service。方法三:提升service...

    从三个层面入手:

    A:提供进程优先级,降低进程被杀死的概率

    方法一:监控手机锁屏解锁事件,在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉。

    方法二:启动前台service。

    方法三:提升service优先级:在AndroidManifest.xml文件中对于intent-filter可以通过

    android:priority = "1000"//这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播。

    B:在进程被杀死后,进行拉活。

    方法一:注册高频率广播接收器,唤起进程。

    如网络变化,解锁屏幕,开机等

    方法二:双进程相互唤起。

    方法三:依靠系统唤起。

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

    C. 依靠第三方根据终端不同。

    在小米手机(包括 MIUI)接入小米推送、华为手机接入华为推送;

    其他手机可以考虑接入腾讯信鸽或极光推送与小米推送做 A/B Test。

    展开全文
  • 主要介绍了Android Service 服务不被杀死的妙招的相关资料,需要的朋友可以参考下
  • android如何让service不被杀死
                   

    http://www.cnblogs.com/ylligang/articles/2665181.html

    android如何让service不被杀死

    参考链接:http://www.eoeandroid.com/thread-120983-1-1.html
    注:本文不代表个人观点,仅是网上搜集的资料,在此做个笔记。

    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来触发。


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • android如何保证service不被杀死 Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。

    FROM http://www.bdqn.cn/news/201305/9246.shtml


    android如何保证service不被杀死

    Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。

    从Android官方文档中,我们知道onStartCommand有4种int返回值,首先简单地讲讲int返回值的作用。

    一、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后一定能重启。

    二、创建不被杀死的service

    1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY(或START_STICKY_COMPATIBILITY)是service被kill掉后自动重写创建

    @Override

    public int onStartCommand(Intent intent, int flags, int startId)

    {

     return START_STICKY_COMPATIBILITY;

     //return super.onStartCommand(intent, flags, startId);

    }

    @Override

    public int onStartCommand(Intent intent, int flags, int startId)

    {

     flags = START_STICKY;

     return super.onStartCommand(intent, flags, startId);

     // return START_REDELIVER_INTENT;

    }

    @Override

    public void onStart(Intent intent, int startId)

    {

    // 再次动态注册广播

    IntentFilter localIntentFilter = new IntentFilter("android.intent.action.USER_PRESENT");

    localIntentFilter.setPriority(Integer.MAX_VALUE);// 整形最大值

    myReceiver searchReceiver = new myReceiver();

    registerReceiver(searchReceiver, localIntentFilter);


    super.onStart(intent, startId);

    }


    2.在Service的onDestroy()中重启Service.

    public void onDestroy()

    {

     Intent localIntent = new Intent();

     localIntent.setClass(this, MyService.class); // 销毁时重新启动Service

     this.startService(localIntent);

    }

    3.创建一个广播

    public class myReceiver extends BroadcastReceiver

    {

    @Override

    public void onReceive(Context context, Intent intent)

    {

     context.startService(new Intent(context, Google.class));

    }

    }

    4.AndroidManifest.xml中注册广播myReceiver及MyService服务

    <receiver android:name=".myReceiver" >

               <intent-filter android:priority="2147483647" ><!--优先级加最高-->

                   <!-- 系统启动完成后会调用 -->

                   <action android:name="android.intent.action.BOOT_COMPLETED" />              

                   <!-- 解锁完成后会调用 -->

                   <action android:name="android.intent.action.USER_PRESENT" />

                   <!-- 监听情景切换 -->

                   <action android:name="android.media.RINGER_MODE_CHANGED" />              

               </intent-filter>

    </receiver>

    <service android:name=".MyService" >

    注:解锁,启动,切换场景激活广播需加权限,如启动完成,及手机机状态等。

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />


    亲测ZTE U795手机Android 4.0.4版本adb push到systemapp下android:persistent="true"

    变成核心程序,在360杀掉进程的时候,myReceiver照样有效,保证service重生。呃

    KILL问题:

    1. settings 中stop service

    onDestroy方法中,调用startService进行Service的重启。

    2.settings中force stop 应用

    捕捉系统进行广播(action为android.intent.action.PACKAGE_RESTARTED)

    3. 借助第三方应用kill掉running task

    提升service的优先级,程序签名,或adb push到systemapp下等

    相较于/data/app下的应用,放在/system/app下的应用享受更多的特权,比如若在其Manifest.xml文件中设置persistent属性为true,则可使其免受out-of-memory killer的影响。如应用程序'Phone'的AndroidManifest.xml文件:

       <application android:name="PhoneApp"

                    android:persistent="true"

                    android:label="@string/dialerIconLabel"

                    android:icon="@drawable/ic_launcher_phone">

            ...

       </application>

    设置后app提升为系统核心级别

    展开全文
  • 目前能否保证service不被杀死 Service设置成START_STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样 提升service优先级 在AndroidManifest.xml文件中对于intent-filter可以通过...

    目前能否保证service不被杀死

    Service设置成START_STICKY

    • kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样

    提升service优先级

    • 在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播
    • 【结论】目前看来,priority这个属性貌似只适用于broadcast,对于Service来说可能无效

    提升service进程优先级

    • Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收
    • 当service运行在低内存的环境时,将会kill掉一些存在的进程。因此进程的优先级将会很重要,可以在startForeground()使用startForeground()将service放到前台状态。这样在低内存时被kill的几率会低一些。
    • 【结论】如果在极度极度低内存的压力下,该service还是会被kill掉,并且不一定会restart()

    onDestroy方法里重启service

    • service +broadcast 方式,就是当service走onDestory()的时候,发送一个自定义的广播,当收到广播的时候,重新启动service
    • 也可以直接在onDestroy()里startService
    • 【结论】当使用类似口口管家等第三方应用或是在setting里-应用-强制停止时,APP进程可能就直接被干掉了,onDestroy方法都进不来,所以还是无法保证

    监听系统广播判断Service状态

    • 通过系统的一些广播,比如:手机重启、界面唤醒、应用状态改变等等监听并捕获到,然后判断我们的Service是否还存活,别忘记加权限
    • 【结论】这也能算是一种措施,不过感觉监听多了会导致Service很混乱,带来诸多不便

    在JNI层,用C代码fork一个进程出来

    • 这样产生的进程,会被系统认为是两个不同的进程.但是Android5.0之后可能不行

    root之后放到system/app变成系统级应用

    大招: 放一个像素在前台(手机QQ)


    展开全文
  • 关于网友提出的“android 如何让service不被杀死?”问题疑问,本网通过在网上对“android 如何让service不被杀死?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下: 问题:android 如何让...
  • 如何保证Service不被杀死 Android 进程不死从3个层面入手: A.提供进程优先级,降低进程被杀死的概率 方法一:监控手机锁屏解锁事件,在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉。 ...
  • Android的文档知道,当进程长期活动,或系统需要资源时,会自动清理门户,杀死一些Service,和可见的Activity等所在的进程。但是如果某个进程被杀死(如数据缓存进程,或状态监控进程,或远程服务进程),...
  • 今天看到一篇文章,关于jni应用的一个实例,可惜不是csdn的,是微信公众号,不能直接收藏,为了分享,贴出网址如下:Android 守护进程 service不被杀死
  • Android Service 不被杀死并提高优先级

    千次阅读 2015-07-23 14:17:05
    Android Service 不被杀死有两种思路,一种是将APP设置为系统应用,另一种是增强service的生命力,即使屏幕背光关闭时也能运行。由于设置为系统应用需要root,所以一般使用后一种方法: 1.Androidmanifest.xml的许可...
  • androidservice组件不被杀死

    千次阅读 2014-08-28 14:43:12
    参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自己的Service不被杀死呢? 其实除了常规的手段,我们可以参考一下微信和360,设置-程序-正在运行,可以看到微信是同时开启了两个进程和服务: 【有...
  • 参考链接:...1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建@Overridepublic int onStartCommand(Intent intent, int ...
  • Android Service 不被杀死

    2016-07-11 23:13:56
    1.Android:persistent=true 2.Service设置成START_STICKY,kill 后会重启(等待5秒左右),重传Intent,保持与重启前一样 ​3.通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个...
  • 怎样让Service不被杀死

    千次阅读 2016-11-25 18:44:17
    怎样让Service不被杀死? 在开发过程中,可能会提出一些要求,保证Service不被杀死,当然这种做法我们还是要在程序中添加关闭程序的按钮,也就是开启了就杀不死,除非在软件中关闭。
  • Android 双进程保证service不被杀死

    千次阅读 2015-11-09 14:32:51
    摘要相信安卓app都想保证自己的service不被杀死,网上资源有很多,下面我做一个简单的汇总,希望对大家有用。1. Android App Daemon 在fork()出来的子进程中不断启动服务,保持aliveblog: ...
  • Service是在一段不定的时间运行在后台,和用户交互应用组件。每个Service必须在manifest中 通过来声明。可以通过contect.startservice和contect.bindserverice来启动。和其他的应用组件一样,运行在进程的主线程中...
  • Android Service不被杀死

    千次阅读 2013-03-07 14:45:38
    1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; }-...
  • 转自 https://www.jianshu.com/p/eac026497f14 相关文章: Android 知识点总结(目录) https://blog.csdn.net/a136447572/article/details/81027701 Android 知识点总结 (七)怎么保证service不被杀死...
  • 不被杀死 service

    2018-07-06 17:06:32
    不被杀死安卓service com.lzg.strongService-master

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,942
精华内容 7,576
关键字:

service不被杀死安卓