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


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM