Android实现单按钮点击同时调用退出应用与清缓存方法
解决办法:单次按钮点击调用清理缓存+退出方法
嘿,我来帮你搞定这个需求!你想要点击一个按钮同时触发清理缓存和退出操作(或者你提到的取消激进退出后的合理操作),其实只需要把两个方法的逻辑整合到同一个按钮点击事件里就行,另外我还发现你原来的退出方法里有个小错误,顺便帮你修正了。
第一步:整合方法逻辑,修正退出代码
你可以直接修改现有的clickExit方法,或者新建一个专门的方法,让它先执行清理缓存,再执行正确的退出操作。原来的Process.killProcess(R.id.WebViewSNCF)是错的——killProcess需要传入进程ID(PID),而不是WebView的控件ID,这会导致程序报错,所以我们换成Process.myPid()来获取当前应用的正确进程ID。
下面是整合后的方法:
public void onClearCacheAndExit(View view) { // 先调用清理缓存的方法,传入当前Activity的上下文 deleteCache(this); // 执行合理的退出操作:先把应用移到后台,再结束进程 moveTaskToBack(true); Process.killProcess(Process.myPid()); System.exit(0); }
如果你只是想清理缓存但不退出应用,那把退出相关的代码删掉就行:
public void onClearCache(View view) { deleteCache(this); // 还可以加个提示告诉用户缓存清理完成 Toast.makeText(this, "缓存已清理完毕", Toast.LENGTH_SHORT).show(); }
第二步:布局里绑定按钮点击事件
打开你的activity_main.xml布局文件,添加一个按钮(或者修改你现有的按钮),把android:onClick属性设置为我们刚才新建的方法名:
<Button android:id="@+id/btn_clear_exit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="清理缓存并退出" android:onClick="onClearCacheAndExit"/>
第三步:完整的代码片段参考
这里是修改后MainActivity的关键部分,你可以直接替换或者添加到你的代码里:
public class MainActivity extends Activity { public WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { // 你原来的onCreate代码保持不变 super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.WebViewSNCF); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.loadUrl("https://www.oui.sncf/services/acces-plus"); webView.setWebViewClient(new WebViewClient()); webView.getSettings().setBuiltInZoomControls(true); } // 新增的清理缓存+退出方法 public void onClearCacheAndExit(View view) { deleteCache(this); moveTaskToBack(true); Process.killProcess(Process.myPid()); System.exit(0); } public void clicReturn(View view) { if (webView.canGoBack()) { webView.goBack(); } } // 你原来的清理缓存方法保持不变 public static void deleteCache(Context context) { try { File dir = context.getCacheDir(); deleteDir(dir); } catch (Exception e) {} } public static boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } return dir.delete(); } else if(dir!= null && dir.isFile()) { return dir.delete(); } else { return false; } } }
这样操作之后,点击对应的按钮就会先清理应用的缓存目录,再执行退出操作啦。如果你的需求是只清理缓存不退出,就用我之前提到的简化版方法就行。
内容的提问来源于stack exchange,提问作者Ricardo Ortiz
相关产品推荐
相关产品推荐

