android 如何实现开机启动、清缓存、杀进程、悬浮窗口单双击区分,源码已上传到CSDN
博客专区 > Wei911 的博客 > 博客详情
android 如何实现开机启动、清缓存、杀进程、悬浮窗口单双击区分,源码已上传到CSDN
Wei911 发表于1年前
android 如何实现开机启动、清缓存、杀进程、悬浮窗口单双击区分,源码已上传到CSDN
  • 发表于 1年前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

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

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

  • 开机启动
  • 清除缓存
  • 杀进程
  • 悬浮窗口的单双击
  • 统计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
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 63
码字总数 0
×
Wei911
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: