文档章节

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

We911
 We911
发布于 2017/02/08 10:16
字数 846
阅读 3
收藏 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
粉丝 1
博文 63
码字总数 0
作品 0
深圳
程序员
私信 提问
Android进程系列第八篇---LowmemoryKiller机制分析(下)

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

LooperJing
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群英传
04/25
0
0
Android进程系列第七篇---LowmemoryKiller机制分析(中)

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

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

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

顶层设计
2012/09/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【Flutter教程】从零构建电商应用(一)

在这个系列中,我们将学习如何使用google的移动开发框架flutter创建一个电商应用。本文是flutter框架系列教程的第一部分,将学习如何安装Flutter开发环境并创建第一个Flutter应用,并学习Flu...

笔阁
28分钟前
5
0
什么是以太坊DAO?(三)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 投票支付合约的所有费用和行动需要时间,并要求用户始终保持活跃,知情和专注。另一...

geek12345
30分钟前
2
0
一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
今天
3
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
今天
1
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
今天
1K
14

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部