最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

用途

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

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

優(yōu)點(diǎn)

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

缺點(diǎn)

系統(tǒng)會(huì)直接殺掉APP進(jìn)程,無(wú)法進(jìn)行拉起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;
    }

方案二:手動(dòng)刪除內(nèi)部?jī)?chǔ)存和外部?jī)?chǔ)存

優(yōu)點(diǎn)

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

缺點(diǎn)

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

2.因?yàn)閿?shù)據(jù)庫(kù)文件被刪除,所以重新拉起啟動(dòng)頁(yè)時(shí)需要?jiǎng)h除當(dāng)前進(jìn)程,此時(shí)會(huì)黑屏一下。

代碼

注意:說(shuō)明一點(diǎn)下面代碼中的ApplicationManager.getApplication()其實(shí)是獲取了當(dāng)前app的Application對(duì)象,也可以替換成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);
        }
        //殺掉以前進(jìn)程
        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();
    }

    /**
     * 刪除單個(gè)文件
     *
     * @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ù)路徑刪除指定的目錄或文件,無(wú)論存在與否
     */
    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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

四川省| 额济纳旗| 金寨县| 长岛县| 闻喜县| 务川| 保亭| 香港 | 夏津县| 南宫市| 潞西市| 南木林县| 灌南县| 牙克石市| 荥经县| 温宿县| 婺源县| 佛冈县| 邵阳县| 青州市| 会同县| 南京市| 威信县| 汉川市| 松滋市| 深圳市| 长治市| 秦安县| 厦门市| 兴仁县| 盐山县| 长葛市| 拉萨市| 绍兴县| 西宁市| 湖北省| 彭泽县| 西峡县| 开阳县| 乡宁县| 襄垣县|