- 浏览: 71153 次
- 性别:
- 来自: 武汉
文章分类
最新评论
大部分应用在手机长按home键删除最近程序时,进程会被杀掉,本文将实现一个不死的service,
首先,看入口程序:
MainActivity
其中最重要的是packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
执行此代码后,应用在桌面的图标会被隐藏,且长按手机home键不会查看到该程序,所以也就无法杀死进程。当然,从设置里面还是可以强制杀死的,任何应用都不例外。
相反, packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
PackageManager.DONT_KILL_APP);
就是显示应用桌面图标并且可以长按手机home键中找到该程序,从而可以将APP进程杀死。
当然我们还要有一个服务来为我们做事,
MainService
除此之外要想保证服务一直存在,可以在用户最常按的电源键上做文章,因此我们需要一个广播接收器
BootBroadcastReceiver
AndroidManifest.xml
首先,看入口程序:
MainActivity
package where.com.notkillservicedemo; import android.app.Activity; import android.content.ComponentName; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PackageManager packageManager = this.getPackageManager(); ComponentName componentName = new ComponentName(this, MainActivity.class); //隐藏APP桌面图标并且不会在最近使用程序中找到 packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
其中最重要的是packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
执行此代码后,应用在桌面的图标会被隐藏,且长按手机home键不会查看到该程序,所以也就无法杀死进程。当然,从设置里面还是可以强制杀死的,任何应用都不例外。
相反, packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
PackageManager.DONT_KILL_APP);
就是显示应用桌面图标并且可以长按手机home键中找到该程序,从而可以将APP进程杀死。
当然我们还要有一个服务来为我们做事,
MainService
package where.com.notkillservicedemo; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; import java.util.Timer; import java.util.TimerTask; public class MainService extends Service { public final static String TAG = "MainService"; private Timer timer = new Timer(); private class MyTask extends TimerTask { @Override public void run() { Log.e(TAG,"1111"); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG,"onStartCommand"); timer.schedule(new MyTask(),0,2000); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); Log.e(TAG,"onDestroy"); } @Override public IBinder onBind(Intent intent) { return null; } }
除此之外要想保证服务一直存在,可以在用户最常按的电源键上做文章,因此我们需要一个广播接收器
BootBroadcastReceiver
package where.com.notkillservicedemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * 开机自启,按键启动 */ public class BootBroadcastReceiver extends BroadcastReceiver { public static final String TAG = BootBroadcastReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.e(TAG, "BootBroadcastReceiver onReceive"); if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || intent.getAction().equals(Intent.ACTION_SCREEN_ON) || intent.getAction().equals(Intent.ACTION_SCREEN_OFF) || intent.getAction().equals(Intent.ACTION_USER_PRESENT) || android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { Log.e(TAG, "action=" + intent.getAction()); Intent ootStartIntent = new Intent(context, MainService.class); context.startService(ootStartIntent); } } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="where.com.notkillservicedemo" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MainService"/> <receiver android:name=".BootBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.media.AUDIO_BECOMING_NOISY" /> <action android:name="android.intent.action.SCREEN_ON" /> <action android:name="android.intent.action.SCREEN_OFF" /> <action android:name="android.intent.action.USER_PRESENT" /> </intent-filter> </receiver> </application> </manifest>
发表评论
-
android中string.xml通配符以及颜色
2016-11-29 21:42 1652string.xml <resources> ... -
使用zxing实现生成二维码
2016-11-28 00:58 589github: https://github.com/bill ... -
android将视频文件转化为图片
2016-11-24 00:04 2085public void getBitmapsFromVi ... -
android通过文件管理器选择文件
2016-11-22 23:36 1820public void openSystemF ... -
将bitmap保存为文件
2016-11-22 23:28 1296public void saveBitmap(Bitma ... -
Material Design动画(一)reveal effect
2016-09-22 22:47 441Animator animator = ViewAn ... -
Android将apk放置于asset目录下安装
2016-09-13 16:32 1053ServiceApkInstaller.java publ ... -
创建自定义控件在布局中的自定义属性
2016-09-11 21:15 6061.在values目录下新建attrs.xml < ... -
androidstudio搭建NDK开发环境
2016-09-08 18:53 19811.打开SDK Manager下载NDK 2.设置根目录中的 ... -
[Android Studio 权威教程]AS添加第三方库的6种方式(Jar,module,so等)
2016-09-05 18:07 740http://blog.csdn.net/yy13003263 ... -
android启动其他应用得service
2016-08-31 10:03 699Intent i=new Intent(); i.s ... -
android屏幕分辨率适配工具
2016-07-22 17:22 596下载附件后,执行 java -jar autolayout.j ... -
android开机自启广播无效果的曲线解决方案
2015-10-04 23:24 2611AndroidManifest.xml <?xml ... -
坑爹的MediaPlayer.isPlaying()
2015-09-18 14:42 2463在这个安卓手机ROM千奇百怪的时代,MediaPlayer作为 ... -
CompletionService 实践
2015-04-26 20:02 529当向Executor提交批处理任务时,并且希望在它们完 ... -
Bitmap的简单应用
2015-03-23 23:56 652package com.example.b; imp ... -
listpreference
2015-01-07 23:02 582MyPreferencesActivity.java pa ... -
李刚安卓疯狂讲义
2014-02-11 23:30 37压缩分卷5个字 -
android开发工具
2014-01-29 00:07 553android开发工具 -
android 拖动条改变屏幕亮度
2013-04-26 00:29 1141main.xml <?xml version=&qu ...
相关推荐
杀不死服务实现原理: 1:Android一个app可以启动2个进程 2:进程A与进程B互相守护 3:进程A时刻盯着进程B,通用进程B也时刻盯着进程B 4:进程之间互相盯着,需要用到IPC进程间通信技术(也就是Binder机制AIDL 5:...
用本例子是不断保持后台唤醒的例子源码,这是修改之后的,安装之后就能不断的唤醒,实现后台service持续运行,并且唤醒之后进入自定义界面,4.2.2测试唤醒的时候程序可以直接绕过屏幕锁但是点一下还是会出现锁屏界面...
android杀不死服务一种实现,能过保证第三方软件和系统杀不死他,很好用哦
Android多进程通讯AIDL实现客户端回调
本小程序是一个支付宝控件接口示例,当进入支付宝页面的时候点击所要支付的内容时会弹出提示框问是否安装支付宝支付服务,用户可以选择是否可以安装,只有安装后才可以支付,大家可以多多学习里面的编写思想,界面...
直接提供代码,大家可以试试,现在我们项目中用的就是这个方案,目前可用!
进程不死永远是伪命题,各位再接再厉。 demo里面总共有4种方式实现进程保活和拉活。能保证70%到80%的机子能存活吧。
Android可编辑Spinner,自定义Spinner,可以选择,可以编辑。
Messenger实现多进程通讯
aidl实现多进程通讯
代码实现的是像handcent sms或者chomp sms那样的气泡短信样式,也是iphone上的气泡聊天模式。实现这种效果的重点是ListView的divider和listSelector
Android GIF图片展示,可以说实现本地gif展示和网络gif展示
仿微信语音对话实现 仿微信语音对话实现 仿微信语音对话实现
前言 Crash率是衡量一个App好坏的重要指标之一。...所以,我们要去努力实现一个永远打不死的小强 —— 不会出现Crash闪退的APP。 一、如何打造? 开篇我还是得要重申一下我的工作理念,当我们遇见一个bu
提前声明以下四点本文是本人开发 Android 至今综合各方资料所得不以节能来维持进程保活的手段,都是耍流氓本文不是教你做永生不死的进程,如果指望实现进程永生不