-----------如何實現開機啓動、清緩存、殺進程、懸浮窗口單雙擊區分,附源碼

http://www.cnblogs.com/Lefter/archive/2012/09/23/2699057.html

如何實現開機啓動、清緩存、殺進程、懸浮窗口單雙擊區分,附源碼

在本文,我們將實現以下功能:

  • 開機啓動
  • 清除緩存
  • 殺進程
  • 懸浮窗口的單雙擊
  • 統計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



本公衆號將以推送Android各種技術乾貨或碎片化知識,以及整理老司機日常工作中踩過的坑涉及到的經驗知識爲主,也會不定期將正在學習使用的新技術總結出來進行分享。每天一點乾貨小知識把你的碎片時間充分利用起來。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章