- 浏览: 75048 次
- 性别:
- 来自: 武汉
文章分类
最新评论
大部分应用在手机长按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 1805string.xml <resources> ... -
使用zxing实现生成二维码
2016-11-28 00:58 641github: https://github.com/bill ... -
android将视频文件转化为图片
2016-11-24 00:04 2180public void getBitmapsFromVi ... -
android通过文件管理器选择文件
2016-11-22 23:36 1899public void openSystemF ... -
将bitmap保存为文件
2016-11-22 23:28 1413public void saveBitmap(Bitma ... -
Material Design动画(一)reveal effect
2016-09-22 22:47 496Animator animator = ViewAn ... -
Android将apk放置于asset目录下安装
2016-09-13 16:32 1123ServiceApkInstaller.java publ ... -
创建自定义控件在布局中的自定义属性
2016-09-11 21:15 6591.在values目录下新建attrs.xml < ... -
androidstudio搭建NDK开发环境
2016-09-08 18:53 20441.打开SDK Manager下载NDK 2.设置根目录中的 ... -
[Android Studio 权威教程]AS添加第三方库的6种方式(Jar,module,so等)
2016-09-05 18:07 834http://blog.csdn.net/yy13003263 ... -
android启动其他应用得service
2016-08-31 10:03 754Intent i=new Intent(); i.s ... -
android屏幕分辨率适配工具
2016-07-22 17:22 671下载附件后,执行 java -jar autolayout.j ... -
android开机自启广播无效果的曲线解决方案
2015-10-04 23:24 2733AndroidManifest.xml <?xml ... -
坑爹的MediaPlayer.isPlaying()
2015-09-18 14:42 2527在这个安卓手机ROM千奇百怪的时代,MediaPlayer作为 ... -
CompletionService 实践
2015-04-26 20:02 591当向Executor提交批处理任务时,并且希望在它们完 ... -
Bitmap的简单应用
2015-03-23 23:56 793package com.example.b; imp ... -
listpreference
2015-01-07 23:02 644MyPreferencesActivity.java pa ... -
李刚安卓疯狂讲义
2014-02-11 23:30 37压缩分卷5个字 -
android开发工具
2014-01-29 00:07 624android开发工具 -
android 拖动条改变屏幕亮度
2013-04-26 00:29 1265main.xml <?xml version=&qu ...
相关推荐
"Android不死Service"这个概念通常指的是设计一种Service,即使在用户手动停止或者被第三方清理工具清理后,也能尽快自动重启,确保服务的连续性。这种Service的实现涉及对Android进程生命周期的理解以及巧妙地利用...
杀不死服务实现原理: 1:Android一个app可以启动2个进程 2:进程A与进程B互相守护 3:进程A时刻盯着进程B,通用进程B也时刻盯着进程B 4:进程之间互相盯着,需要用到IPC进程间通信技术(也就是Binder机制AIDL 5:...
用本例子是不断保持后台唤醒的例子源码,这是修改之后的,安装之后就能不断的唤醒,实现后台service持续运行,并且唤醒之后进入自定义界面,4.2.2测试唤醒的时候程序可以直接绕过屏幕锁但是点一下还是会出现锁屏界面...
实现Android中的"不死服务"主要涉及到以下几点: 1. **Service生命周期管理**: - `onCreate()`: 当服务首次创建时调用,适合进行初始化操作。 - `onStartCommand()`: 接收到`startService()`请求时调用,返回值...
本文将深入探讨如何在Android中实现双守护进程,以及如何做到“不死”和“免杀”。 首先,理解Android进程生命周期是关键。Android系统会根据内存状况和用户交互情况动态管理应用进程,当系统资源紧张时,后台进程...
尽管IntentService会在任务完成后自动停止,但如果结合上述的一些技巧,仍然可以实现类似“不被杀死”的效果。 综上所述,通过组合使用这些策略,开发者可以显著提高Service在Android系统中的生存能力,确保后台...
根据描述中的信息,提供的`DNProcess`压缩包可能包含了一些示例代码,演示了四种不同的进程保活和拉活的实现方法。 1. **服务(Service)**:Android服务是运行在后台的一种组件,可以长时间执行任务。我们可以通过...
然而,在某些情况下,如后台服务、插件化开发或者大型应用模块化等场景,我们可能需要实现多进程间的通信。这时,Android Interface Definition Language (AIDL) 就起到了关键作用。AIDL是一种接口定义语言,用于...
在某些场景下,比如服务、广播接收器等组件需要在不同的进程中运行,或者我们希望实现一个插件化架构,这时就需要用到Android的多进程通信。AIDL(Android Interface Definition Language)是Android提供的一种接口...
在Android系统中,多进程通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。在大型复杂的应用场景下,为了提高程序的稳定性和性能,有时我们需要将服务或者部分功能模块运行在...
总的来说,Android可编辑Spinner是通过自定义Adapter和View来实现的,它结合了选择和输入两种交互方式,增加了用户操作的灵活性,是Android开发中提升用户体验的一个实用技巧。开发者在实现这一功能时,需要考虑数据...
5. **服务常驻与不死问题**: 保持Service常驻的常见策略包括提高代码质量以防止崩溃,设置监控服务的其他Service(称为“看门狗”),或者使用第三方库。然而,Android系统为了优化性能,可能会在内存紧张时杀死...
"Android 展开收缩Demo"是一个典型的实例,它展示了如何在Android应用中实现元素的展开和收缩动画。这种动画效果常见于下拉菜单、折叠列表或者任何需要动态改变大小或可见性的界面元素中。 在Android中,有两种主要...
本小程序是一个支付宝控件接口示例,当进入支付宝页面的时候点击所要支付的内容时会弹出提示框问是否安装支付宝支付服务,用户可以选择是否可以安装,只有安装后才可以支付,大家可以多多学习里面的编写思想,界面...
在Android应用程序开发中,实现程序自动更新是一项重要的功能,它能确保用户始终使用最新、最安全的版本。...通过学习和理解上述提供的资源,开发者可以更好地掌握自动更新的实现方法并将其应用于自己的项目中。
#### 实现方法 文章详细介绍了实现过程中的关键技术点,包括但不限于: - **图像预处理**:为了提高检测效率,通常需要对原始图像进行缩放、灰度化等预处理步骤。 - **特征提取**:利用Haar特征等方法从图像中提取...
2. **库和工具**:包括各种库(如SQLite数据库、OpenGL ES、多媒体支持库等)和开发工具(如Android SDK、ADT插件等),开发者可以利用这些工具实现更丰富的功能。 3. **开发者服务**:如Google Play服务,提供地图...