Android徹底清除APP數(shù)據(jù)的兩種方案總結(jié)
用途
用于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中activity處理返回結(jié)果的實現(xiàn)方式
這篇文章主要介紹了Android中activity處理返回結(jié)果的實現(xiàn)方式,為了實現(xiàn)這個功能,Android提供了一個機制,跳轉(zhuǎn)到其他activity時,再返回,可以接受到其他activity返回的值,無需再start新的當前activity。需要的朋友可以參考下2016-12-12Android 加載大圖、多圖和LruCache緩存詳細介紹
這篇文章主要介紹了Android 加載大圖、多圖和LruCache緩存詳細介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10Flutter仿微信通訊錄實現(xiàn)自定義導航條的示例代碼
某些頁面比如我們在選擇聯(lián)系人或者某個城市的時候需要快速定位到我們需要的選項,一般都會需要像微信通訊錄右邊有一個導航條一樣的功能,本文將利用Flutter實現(xiàn)這一效果,需要的可以參考一下2022-04-04Android 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問題詳解,感興趣的同學可以看看,希望對你起到幫助,有用的話記得收藏,方便下次瀏覽2021-11-11Android自定義豎排TextView實現(xiàn)實例
這篇文章主要介紹了Android自定義豎排TextView實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下2017-05-05