欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android徹底清除APP數(shù)據(jù)的兩種方案總結(jié)

 更新時間:2021年11月19日 09:41:45   作者:pumpkin的玄學  
大家在用Android手機的時候肯定都遇到過內(nèi)存剩余空間越來越小的情況,所以下面這篇文章主要給大家介紹了關(guān)于Android徹底清除APP數(shù)據(jù)的兩種方案,需要的朋友可以參考下

用途

用于APP內(nèi)部的重置功能實現(xiàn)。

方案一:利用命令行pm clear 包名,系統(tǒng)級別清除App數(shù)據(jù)

優(yōu)點

和任務管理器里面清除所有數(shù)據(jù)的操作一致,會刪除所有的APP數(shù)據(jù)。重新進入APP還需重新申請權(quán)限。

缺點

系統(tǒng)會直接殺掉APP進程,無法進行拉起APP的操作。

代碼

    public static Process clearAppUserData(String packageName) {
        Process p = execRuntimeProcess("pm clear " + packageName);
        return p;
    }

    public static  Process execRuntimeProcess(String commond) {
        Process p = null;
        try {
            p = Runtime.getRuntime().exec(commond);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return p;
    }

方案二:手動刪除內(nèi)部儲存和外部儲存

優(yōu)點

由自身控制,可以重新拉起APP。

缺點

1.沒有系統(tǒng)級的清除那么徹底,比如重新拉起后不需要重新申請權(quán)限。當然數(shù)據(jù)庫,SharePreferences相關(guān)的通通都會刪掉的

2.因為數(shù)據(jù)庫文件被刪除,所以重新拉起啟動頁時需要刪除當前進程,此時會黑屏一下。

代碼

注意:說明一點下面代碼中的ApplicationManager.getApplication()其實是獲取了當前app的Application對象,也可以替換成context。

   public void use(){
       //使用
        clearPublic();
        clearPublic();
        restartApp();
    }

   public static void restartApp() {
        Activity activity = getActivity();
        final Intent intent = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName());
        if (intent != null) {
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            activity.startActivity(intent);
        }
        //殺掉以前進程
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    /**
     * 清空公有目錄
     */
    public static void clearPublic() {
        if (ApplicationManager.getApplication() == null) {
            throw new RuntimeException("App no init");
        }
        String publicFilePath = Environment.getExternalStorageDirectory().getPath() + "/" + getPackageInfo().packageName;
        File dir = new File(publicFilePath);
        File[] files = dir.listFiles();
        if (null != files) {
            for (File file : files) {
                deleteFolder(file.getAbsolutePath());
            }
        }
    }

    /**
     * 清空私有目錄
     */
    public static  void clearPrivate() {
        if (ApplicationManager.getApplication() == null) {
            throw new RuntimeException("App no init");
        }
        //清空文件夾
        File dir = new File(ApplicationManager.getApplication().getFilesDir().getParent());
        File[] files = dir.listFiles();
        if (null != files) {
            for (File file : files) {
                if (!file.getName().contains("lib")) {
                    deleteFolder(file.getAbsolutePath());
                }
            }
        }
    }

    /**
     * 刪除指定文件
     */
    private static  boolean deleteDirectory(String filePath) {
        boolean flag = false;
        if (!filePath.endsWith(File.separator)) {
            filePath = filePath + File.separator;
        }
        File dirFile = new File(filePath);
        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;
        }
        flag = true;
        File[] files = dirFile.listFiles();
        for (File file : files) {
            if (file.isFile()) {
                flag = deleteSingleFile(file.getAbsolutePath());
                if (!flag) {
                    break;
                }
            } else {
                flag = deleteDirectory(file.getAbsolutePath());
                if (!flag) {
                    break;
                }
            }
        }
        if (!flag) {
            return false;
        }
        return dirFile.delete();
    }

    /**
     * 刪除單個文件
     *
     * @param filePath 被刪除文件的文件名
     * @return 文件刪除成功返回true,否則返回false
     */
    private static boolean deleteSingleFile(String filePath) {
        File file = new File(filePath);
        if (file.isFile() && file.exists()) {
            return file.delete();
        }
        return false;
    }

    /**
     * 根據(jù)路徑刪除指定的目錄或文件,無論存在與否
     */
    private static boolean deleteFolder(String filePath) {
        File file = new File(filePath);
        if (!file.exists()) {
            return false;
        } else {
            if (file.isFile()) {
                return deleteSingleFile(filePath);
            } else {
                return deleteDirectory(filePath);
            }
        }
    }

    /**
     * 獲取包信息
     */
    private static PackageInfo getPackageInfo() {
        PackageManager packageManager = ApplicationManager.getApplication().getPackageManager();
        PackageInfo packInfo = null;
        try {
            packInfo = packageManager.getPackageInfo(ApplicationManager.getApplication().getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return packInfo;
    }

總結(jié)

到此這篇關(guān)于Android徹底清除APP數(shù)據(jù)的兩種方案的文章就介紹到這了,更多相關(guān)Android徹底清除APP數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android路由框架ARouter的使用示例

    Android路由框架ARouter的使用示例

    組件化或者模塊化開發(fā)模式,已逐漸成為熱浪的形式,使用這些模式可以讓我們程序更容易的擴展、更方便的維護、更快捷的同步開發(fā)與更簡單的單獨調(diào)試,而ARouter的出現(xiàn)就是讓組件間、模塊間是實現(xiàn)完全的獨立。ARouter主要解決組件間、模塊間的界面跳轉(zhuǎn)問題。
    2021-06-06
  • Flutter進階質(zhì)感設計之標簽欄

    Flutter進階質(zhì)感設計之標簽欄

    這篇文章主要為大家詳細介紹了Flutter進階質(zhì)感設計之標簽欄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android中activity處理返回結(jié)果的實現(xiàn)方式

    Android中activity處理返回結(jié)果的實現(xiàn)方式

    這篇文章主要介紹了Android中activity處理返回結(jié)果的實現(xiàn)方式,為了實現(xiàn)這個功能,Android提供了一個機制,跳轉(zhuǎn)到其他activity時,再返回,可以接受到其他activity返回的值,無需再start新的當前activity。需要的朋友可以參考下
    2016-12-12
  • Android自定義View仿微信LetterView效果

    Android自定義View仿微信LetterView效果

    這篇文章主要介紹了Android自定義View仿微信LetterView效果,代碼簡單易懂,非常不錯,具有參考借鑒借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Flutter開發(fā)中的路由參數(shù)處理

    Flutter開發(fā)中的路由參數(shù)處理

    在實際開發(fā)中,我們經(jīng)常會需要在頁面跳轉(zhuǎn)的時候攜帶路由參數(shù),典型的例子就是從列表到詳情頁的時候,需要攜帶詳情的 id,以便詳情頁獲取對應的數(shù)據(jù)。同時,有些時候還需要返回時攜帶參數(shù)返回上一級,以便上級頁面根據(jù)返回結(jié)果更新。本篇將介紹這兩種情形的實現(xiàn)。
    2021-06-06
  • Android 加載大圖、多圖和LruCache緩存詳細介紹

    Android 加載大圖、多圖和LruCache緩存詳細介紹

    這篇文章主要介紹了Android 加載大圖、多圖和LruCache緩存詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Flutter仿微信通訊錄實現(xiàn)自定義導航條的示例代碼

    Flutter仿微信通訊錄實現(xiàn)自定義導航條的示例代碼

    某些頁面比如我們在選擇聯(lián)系人或者某個城市的時候需要快速定位到我們需要的選項,一般都會需要像微信通訊錄右邊有一個導航條一樣的功能,本文將利用Flutter實現(xiàn)這一效果,需要的可以參考一下
    2022-04-04
  • Android App開發(fā)中使用RecyclerView實現(xiàn)Gallery畫廊的實例

    Android App開發(fā)中使用RecyclerView實現(xiàn)Gallery畫廊的實例

    這篇文章主要介紹了Android App開發(fā)中使用RecyclerView實現(xiàn)Gallery畫廊的實例,比普通的ListView實現(xiàn)的效果更為強大,需要的朋友可以參考下
    2016-04-04
  • 關(guān)于Android?Webview?設置Cookie問題詳解

    關(guān)于Android?Webview?設置Cookie問題詳解

    大家好,本篇文章是關(guān)于Android?Webview?設置Cookie問題詳解,感興趣的同學可以看看,希望對你起到幫助,有用的話記得收藏,方便下次瀏覽
    2021-11-11
  • Android自定義豎排TextView實現(xiàn)實例

    Android自定義豎排TextView實現(xiàn)實例

    這篇文章主要介紹了Android自定義豎排TextView實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論