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

转自http://www.cnblogs.com/Lefter/archive/2012/09/23/2699057.html#2479991

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

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

一、开机启动

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

      以本程序中的MyBroadcastReceiver为例:

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中的声明如下:

 <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

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

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

三、杀进程

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

<!-- 杀死进程时需要该权限 -->
<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内存大小

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

源码链接:http://pan.baidu.com/share/link?shareid=62428&uk=2953765628

时间: 2024-09-16 00:11:34

如何实现开机启动、清缓存、杀进程、悬浮窗口单双击区分,附源码的相关文章

android开机自启动原理与实现案例(附源码)_Android

原理: Android系统通过应用程序自行在系统中登记注册事件(即Intent)来响应系统产生的各类消息. Android系统为应用程序管理功能提供了大量的API,通过配置Intent和permission来实现各种功能. 开机自启动是通过 <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="an

android开机自启动原理与实现案例(附源码)

原理: Android系统通过应用程序自行在系统中登记注册事件(即Intent)来响应系统产生的各类消息. Android系统为应用程序管理功能提供了大量的API,通过配置Intent和permission来实现各种功能. 开机自启动是通过 <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="an

360杀毒设置开机启动的新手教程

360杀毒设置开机启动 我们在电脑中打开"杀毒软件"效果如下所示 在我们进入打开"杀毒软件"在打开的界面中我们点击"日志.设置.反馈"之后我们再点击"设置"功能键. 然后在打开进入之后我们开始点击"常规设置"功能键后点击它 进入"常规设置"栏后,我们在"常规选项"栏的登录Windows后自动启动前打勾 设置好后,我们点击下方的"确定"功能键进行保存

【Kafka源码】KafkaController启动过程

[TOC] 之前聊过了很多Kafka启动过程中的一些加载内容,也知道了broker可以分为很多的partition,每个partition内部也可以分为leader和follower,主从之间有数据的复制.那么这么多partition是谁在管理?broker内部有没有主从之分?这就是本文的主角,KafkaController,本文将细细道来. 一.入口 KafkaController的启动入口同样很简洁,在KafkaServer的start方法中. / start kafka controlle

jQuery中数据缓存$.data的用法及源码完全解析_jquery

一.实现原理: 对于DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以jQuery.expando的值命名的属性上,数据存储在全局缓存对象jQuery.cache中.在读取.设置.移除数据时,将通过关联id从全局缓存对象jQuery.cache中找到关联的数据缓存对象,然后在数据缓存对象上执行读取.设置.移除操作. 对于Javascript对象,数据则直接存储在该Javascript对象的属性jQuery.expando上.在读取.设置.移

源码-android在service中启动Activity问题

问题描述 android在service中启动Activity问题 问什么我在service中启动activity,新的activity闪了一下就被原来的覆盖了?附源码: 这段代码在service中,想弹出"激活设备管理器"页面的功能 Intent in = new Intent(); in.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

开机时出现lass.exe进程是病毒吗?lass.exe手动清除方法

电脑开机时出现lass.exe进程是病毒吗? 进程文件:lass 或者 lass.exe 进程名称: Troj.Bdoor.AKM 进程名称: lass.exe是Troj.Bdoor.AKM木马的一部分.该木马允许攻击者访问你的计算机,窃取密码和个人数据.这个进程的安全等级是建议立即进行删除. 出品者: 未知N/A 属于: Troj.Bdoor.AKM 系统进程: 否 后台程序: 是 使用网络: 是 硬件相关: 否 常见错误: 未知N/A 内存使用: 未知N/A 间谍软件: 否 广告软件: 否

开机启动项怎么设置

很多网友不知道开机启动项怎么设置,担心不小心设置错了导致电脑开不了机或者出现其他的程序不能启动的问题.今天xp74系统下载站小编就来教大家怎样合理安全的设置开机启动项,将开机需要加载的程序减少到最小,并保证所有程序能够正常运行,从而加快电脑开机的速度. 通过msconfig设置开机启动项 首先,通过点击"开始","运行",输入"msconfig"回车,打开"系统配置实用程序".选择"启动"标签页,在下面的启

C#下的查杀进程

进程    .net对进程管理的封装非常好,通过System.Diagnostics.Process.GetProcesses()方法可以获得系统内各进程的数组,通过枚举可获得系统内的所有进程(比Windows自带的进程浏览器看到的还多).    ProcessName属性获得的是文件名的前缀,即NotePad,不包含后面的.exe.     要获得更多的信息,需要取得Modules属性数组,但并不是每个进程都能获取Modules属性,所以必须要使用try..catch语句排除异常.该数组的第一