文档章节

android 如何实现开机启动、清缓存、杀进程、悬浮窗口单双击区分,源码已上传到CSDN

We911
 We911
发布于 2017/02/08 10:16
字数 846
阅读 7
收藏 0

如何实现开机启动、清缓存、杀进程、悬浮图标单双击区分,附源码 

在本文,我们将实现以下功能:

  • 开机启动
  • 清除缓存
  • 杀进程
  • 悬浮窗口的单双击
  • 统计RAM可用内存大小

一、开机启动

  很多手机软件具备开机启动的功能,有时候让软件开机启动会非常实用。那么是如何实现开机启动的呢?通过查找我们了解到开机后系统会发送一个启动完毕的广播,Intent.ACTION_BOOT_COMPLETED,那么我们只需要自定义一个BroadcastReciever接收这个广播,在接收到广播后启动我们的程序就可以实现开机启动了。

      以本程序中的MyBroadcastReceiver为例:


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
public class MyBroadcastReceiver extends BroadcastReceiver {
 
     @Override
     public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
         if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
             // 是否选择了开机启动
             boolean start = PreferenceManager.getDefaultSharedPreferences(
                     context).getBoolean(
                     CleanerActivity.KEY_START_WHEN_BOOT_COMPLETED, true );
             if (start) {
                 Intent i = new Intent();
                 i.setClass(context, FloatService. class );
                 context.startService(i);
             }
         }
     }
}

AndroidManifest.xml中的声明如下:
1
2
3
4
5
<receiver android:name= "MyBroadcastReceiver" >
             <intent-filter>
                 <action  android:name= "android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
</receiver>

二、清除缓存

  在Android中Settings的源码中使用了PackageManager的deleteApplicationCacheFiles()方法清除缓存,但是作为第三方软件使用这个函数难度很大,我们在PackageManager中还发现freeStorageAndNotify()方法亦可实现清除缓存,而且第三方软件使用时难度相对较小。因此,我们使用freeStorageAndNotify()方法来实现缓存的清理。

  使用freeStorageAndNotify()时需要在AndroidManifest.xml中声明permission


1
2
<!-- 清除缓存时需要此权限 -->
<uses-permission android:name= "android.permission.CLEAR_APP_CACHE" />

  该函数的具体使用可以参考源码MyFloatView.java中的clearCache()函数。

三、杀进程

  在ActivityManager.java中为我们提供了killBackgroundProcesses(String packageName)函数来杀死进程具体如何杀死进程可以参考源码MyFloatView.java中的killBackgroundProcess()函数。杀进程需要在AndroidManifest中声明如下权限


1
2
<!-- 杀死进程时需要该权限 -->
<uses-permission android:name= "android.permission.KILL_BACKGROUND_PROCESSES" />

四、悬浮窗口的单双击

  网上有很多实现悬浮窗口的教程,但是很少有人实现悬浮窗口的单击和双击事件。在本程序中我们通过添加标志位、记录用户点击悬浮窗口时的时间、单击和双击的响应使用多线程(使用Timer和TimerTask)等方式来判断单击和双击。在MyFloatView.java中的onTouchEvent()函数中对单双击进行判断。

  区分单双击,是通过判断两次单击的间隔来实现的。单击事件的相应线程在执行前先进行一定时间的休眠等待判断是否为双击,根据标志位判断执行是否执行单击响应线程的函数。

五、统计RAM可用内存大小

  A:Android中的MemInfoReader类通过读取/proc/meminfo实现了内存大小相关的函数,但第三方程序无法调用,我们将直接将MemInfoReader.java直接拷贝到项目中,作适当修改即可使用。

  B:通过MemoryInfo和ActivityManager获得可用Ram内存大小


1
2
3
4
5
ActivityManager am = (ActivityManager) this .getSystemService(Context.ACTIVITY_SERVICE);
       MemoryInfo mi = new MemoryInfo();
       am.getMemoryInfo(mi); // mi.availMem; 当前系统的可用内存
       Log.e( "tag" , "getMemoryInfo: " + mi.availMem);

项目源码 下载(csdn): http://download.csdn.net/detail/liduanw/6502943

本文转载自:http://blog.csdn.net/liduanw/article/details/8460956

We911
粉丝 2
博文 63
码字总数 0
作品 0
深圳
程序员
私信 提问
Android进程系列第八篇---LowmemoryKiller机制分析(下)

前面进程系列已经更新了七篇,本文(基于kernel 3.18),基于前两篇博客,继续梳理LMK杀进程机制下篇,主要总结LowmemoryKiller的中kernel的原理部分。 Android进程系列第一篇---进程基础 An...

LooperJing
2018/10/16
0
0
【Rayeager PX2】andoid开机logo分析及PX上的实现

PX2烧的系统也是android的时候,那么修改logo的方式也就大同小异啦,楼主也比较闲,就来试试修改logo。 大家都知道android启动界面分三步, 一步是内核的启动logo, 然后是android的启动初始...

穿prada的008
2015/05/27
169
0
系统角度解读Android P新特性

  先做个安利,大家都知道我们之前开源了一个AspectJ的封装库,现在,AspectJX 要了一次重大版本更新 —— 2.0.0 !!!   * 支持Instant Run编译   * 废弃 includeJarFilter和exclude...

Android群英传
2018/04/25
0
0
Android进程系列第七篇---LowmemoryKiller机制分析(中)

前面进程系列已经更新了六篇,本文(基于Android O源码),梳理LMK杀进程机制中篇,主要总结LowmemoryKiller的中lmkd的原理部分。 Android进程系列第一篇---进程基础 Android进程系列第二篇-...

LooperJing
2018/10/15
0
0
android多activity退出整个程序的一个实现

多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。 网上资料:{ finish()和system(0)都只能退出单个activity。杀进程等的等方式都不行~~~ 解决问题: 我们知道Andro...

顶层设计
2012/09/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux修改时区的正确方法【修改时间,需要修改软连接,靠谱】

CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 [root@centos7 ~]# ll /etc/localtime lrwxrwxrwx 1 root root 33 Oct 12 11:01 /etc/loca......

Airship
35分钟前
0
0
《Netkiller Spring Cloud 手札》之 Master / Slave 主从数据库数据源配置

5.19.1. Master / Slave 主从数据库数据源配置 5.19.1.1. application.properties spring.datasource.master.driverClassName = com.mysql.cj.jdbc.Driverspring.datasource.master.url=j......

netkiller-
39分钟前
43
0
大数据(hadoop-HDFS的本地开发环境的配置与常见的HDFS的JAVA API)

HDFS的本地开发环境搭建 1:所需工具 1)hadoop2.7.3安装包 2)hadoop-eclipse-plugin插件 https://github.com/winghc/hadoop2x-eclipse-plugin 2:搭建过程 1:解压hadoop2.7.3文件2:下载...

这很耳东先生
50分钟前
1
0
TCP协议的定义和丢包时的重传机制

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,...

tantexian
51分钟前
2
0
图解Tomcat类加载机制(阿里面试题)

Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双...

群星纪元
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部