Android中如何像 360 一样优雅的杀死后台服务而不启动
Android中,虽然有很多方法(API或者shell命令)杀死后台`service`,但是仍然有很多程序几秒内再次启动,导致无法真正的杀死。这里主要着重介绍如何像 360 一样杀死Android后台服务,而不会再次启动。
一、已知的 kill
后台应用程序的方法
android.os.Process.killProcess(pid);
activityManager.killBackgroundProcesses(pkgName);
kill -9 pid
这三种方法都可以“杀死”后台应用程序,但是都会自启动,对于前面两种直接使用Android的API就行了,所以就不多介绍了。这里稍微介绍一下 最后一个方法的用法: kill -9 pid
;
方法: kill -9 pid
这其实是一条shell 命令,我们知道Android的底层是Linux系统,所以在Android上可以使用所有的Linux终端命令。那么如何结合在代码中呢,贴一段代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
private void killProcess(String pid) { Process sh = null ; DataOutputStream os = null ; try { sh = Runtime.getRuntime().exec( "su" ); os = new DataOutputStream(sh.getOutputStream()); final String Command = "kill -9 " + pid + "\n" ; os.writeBytes(Command); os.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sh.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
该方法最重要的功能就是告诉你,怎么在Android程序中执行Linux shell 命令
二、终极方法,杀死后台service
而不自启动: am (Activity Manager)
命令
相信很多人对 am
命令都挺熟悉的,它是Android系统中/system/bin/
目录下的一条命令。不仅可以在终端下启动一个应用程序,还可以启动Service
,发送 bro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private void forceStopAPK(String pkgName){ Process sh = null ; DataOutputStream os = null ; try { sh = Runtime.getRuntime().exec( "su" ); os = new DataOutputStream(sh.getOutputStream()); final String Command = "am force-stop " +pkgName+ "\n" ; os.writeBytes(Command); os.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sh.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
通过上面的这段代码,我们调用forceStopAPK
方法,传递一个应用程序的包名,那么我们就可以杀死对应的Android程序,而不会自动启动。亲测:微信,淘宝,酷我,等一系列应用,杀死后不会再启动!Android中,虽然有很多方法(API或者shell命令)杀死后台`service`,但是仍然有很多程序几秒内再次启动,导致无法真正的杀死。这里主要着重介绍如何像 360 一样杀死Android后台服务,而不会再次启动。
一、已知的 kill
后台应用程序的方法
android.os.Process.killProcess(pid);
activityManager.killBackgroundProcesses(pkgName);
kill -9 pid
这三种方法都可以“杀死”后台应用程序,但是都会自启动,对于前面两种直接使用Android的API就行了,所以就不多介绍了。这里稍微介绍一下 最后一个方法的用法: kill -9 pid
;
方法: kill -9 pid
这其实是一条shell 命令,我们知道Android的底层是Linux系统,所以在Android上可以使用所有的Linux终端命令。那么如何结合在代码中呢,贴一段代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
private void killProcess(String pid) { Process sh = null ; DataOutputStream os = null ; try { sh = Runtime.getRuntime().exec( "su" ); os = new DataOutputStream(sh.getOutputStream()); final String Command = "kill -9 " + pid + "\n" ; os.writeBytes(Command); os.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sh.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
该方法最重要的功能就是告诉你,怎么在Android程序中执行Linux shell 命令
二、终极方法,杀死后台service
而不自启动: am (Activity Manager)
命令
相信很多人对 am
命令都挺熟悉的,它是Android系统中/system/bin/
目录下的一条命令。不仅可以在终端下启动一个应用程序,还可以启动Service
,发送 broadcast
以及Intent action
,force stop process
等等,功能非常强大。这里我们要用到一个功能就是强制停止应用程序!
对于命令 am
的介绍与用法,官网给的非常情况,请参照Android 官网: http://developer.android.com/tools/help/adb.html#am
我们用到的方法和功能是:am force-stop <PACKAGE>
下面是我们的代码举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private void forceStopAPK(String pkgName){ Process sh = null ; DataOutputStream os = null ; try { sh = Runtime.getRuntime().exec( "su" ); os = new DataOutputStream(sh.getOutputStream()); final String Command = "am force-stop " +pkgName+ "\n" ; os.writeBytes(Command); os.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sh.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
通过上面的这段代码,我们调用forceStopAPK
方法,传递一个应用程序的包名,那么我们就可以杀死对应的Android程序,而不会自动启动。亲测:微信,淘宝,酷我,等一系列应用,杀死后不会再启动!
Android中如何像 360 一样优雅的杀死后台服务而不启动的更多相关文章
- Android中如何像 360 一样优雅的杀死后台Service而不启动
http://my.oschina.net/mopidick/blog/277813 目录[-] 一.已知的 kill 后台应用程序的方法 方法: kill -9 pid 二.终极方法,杀死后台ser ...
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括 进程(Process)等.应用程序/包.服务(Serv ...
- Android中实现Activity的启动拦截之----实现360卫士的安装应用界面
第一.摘要 今天不是周末,但是我已经放假了,所以就开始我们的技术探索之旅,今天我们来讲一下Android中最期待的技术,就是拦截Activity的启动,其实我在去年的时候,就像实现这个技术了,但是因为 ...
- Android中矢量动画
Android中矢量动画 Android中用<path> 标签来创建SVG,就好比控制着一支画笔,从一点到一点,动一条线. <path> 标签 支持一下属性 M = (Mx, ...
- Android中的动画机制
1 逐帧动画 逐帧动画 就是一系列的图片按照一定的顺序展示的过程. 逐帧动画很简单, 只需要在drawable中或者anim中定义一个Animation-list 其中包含多个it ...
- Android中自定义属性(attrs.xml,TypedArray的使用)
做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...
- 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析
原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...
- Android中对Log日志文件的分析[转]
一,Bug出现了, 需要“干掉”它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你会看bug, a ...
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...
随机推荐
- MySQL被Oracle并购后的409个日日夜夜
2009年4月20日,Oracle并购了Sun,这也意味着MySQL归属到甲骨文的旗下.四百多天过去了,究竟这场并购结局如何?请看本文. 去年对Sun的收购,让甲骨文顺利的将一个潜在的对手MySQL收 ...
- 【COGS 56】质数取石子
[问题描述] DD 和 MM 正在玩取石子游戏.他们的游戏规则是这样的:桌上有若干石子,DD 先取,轮流取,每次必须取质数个.如果某一时刻某一方无法从桌上的石子中取质数个,比如说剩下 0 个或 1 个 ...
- 【BZOJ1010】玩具装箱
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- 使用xshell出现乱码
用xshell链接Linux出现乱码: 解决方法: 先查看Linux支持的字符类型是否为如下类型 如果是,则找到菜单中的文件选项,并在选项中找到属性: 单击属性选项,找到终端,将编码设置为UTF-8: ...
- date命令详解与练习
date : 用来打印或设置系统日期和时间. 它在linux shell编程中经常会用到.比如每天生成随日期变化的档案名,尤其在银行业务中每天都会生成流水文件.eg:datefile=$(date & ...
- 跨控制器操作-thinkphp
用A函数 或者 $use=new IndexController(); A跨控制器 $data->A("Admin/Index")//admin下面的index控制器 $da ...
- ibatis ORA-00911: 无效字符
检查下xml文件中 sql的最后是不是写了 “;” 最容易犯这个毛病,都不知道吃了多少次亏了. 什么ORA-00911: 无效字符 什么The error occurred while applyin ...
- DEDE在下载文件时会生成table
当我们在系统内容模型中添加附件类型字段时,前台需要用{dede:field name='字段名'/}来调用. 例如我在后台发布一篇文章,上传一个zip的附件,字段的时间内容是:'/uploads/so ...
- jquery easy ui 学习 (3) window 限制在父类窗体内
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- TCP客户/服务器程序概述
一个回射服务器: 1)客户从标准输入读入一行文本,并写给服务器 2)服务器从网络输入读入这行文本,并回射给客户 3)客户从网络输入读入这行回射文本,并显示在标准输出上 回射输入行这样一个客户/服务器程 ...