android 怎么调用强制关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 怎么调用强制关闭相关的知识,希望对你有一定的参考价值。

android手机调用强制关闭的方法(以小米2手机为例,其他手机操作方法类似):

1、打开手机的设置界面;

2、找到开发者选项,点击进入开发者选项的设置界面;

3、进入后找到显示强制关闭的选项,点击旁边的按钮,将其打开即可。

参考技术A 关闭? 关闭什么?
给你提供下Android下结束进程的方法  希望对你有用 
一、结束一个活动Activity  要主动的结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的Activity,激活下一个Activity。当然其他的finish系列方法,我们不在这里做详细讨论,有兴趣的同学可以自己查阅一下SDK 的文档。二、强制结束当前的进程  强行结束当前进程有两个方法。  1、killProcess(int pid) 例子:android.os.Process.killProcess(android.os.Process.myPid());这个方法使用是有条件的:a、将被杀掉的进程 和 当前进程 处于同一个包或者应用程序中;b、将被杀掉的进程 是由当前应用程序所创建的附加进程;c、将被杀掉的进程 和 当前进程 共享了普通用户的UID。(这里的普通用户,是相对于Root权限的用户来说的)  2、System.exit(int code) 例子:System.exit(0);  该方法只能用于结束当前进程自身,在程序遇到异常,无法正常执行时,可以通过这个方法强制退出。  需要注意的是,这两个方法,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能错过了保存数据的机会。因此,这两个方法最好使用在出现异常的时候!三、结束另一个进程  要通过一个进程去结束另一个进程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android的开发文档中介绍说,这个函数会导致一些问题( the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc.),所以建议大家使用一个新的方法:   void killBackgroundProcesses(String packageName)  由于这个方法没有返回值,所以我们也不知道我们的目标进程是否真的退出了。但是,我目前只发现了这个可以结束另一个进程的方法。四、退出到主屏幕  这个方法,也是退出当前进程的一个方法。如果我们在进程中创建了很多的Activity,但是又不想关闭时去退出不在任务栈顶的Activity,那么就可以直接使用这个方法了。
参考技术B 旧版本2.0以前能用这个android.os.Process.killProcess(android.os.Process.myPid());,但是现在不能实现全部退出(除非你只有一个activity)。
如果说强制关闭的forseclose。你需要制造一个异常,捕获异常,并自定义该异常,不让其弹出强制关闭对话框。
好的做法是,建一个集合,放在baseactivity中,每启动activity时,将其放在集合中,最后全部退出时,遍历一下,finish掉。也可采取单例模式,或者用广播接收者。自己百度很多的。

还有就是一键清理的原理了,申请一个超级大的内存,系统不够,将会KO掉所有后台运行的应用。本回答被提问者和网友采纳
参考技术C 1.System.exit(0);
这个最简单了。
参考技术D android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

Android 强制关闭 ProgressDialog

【中文标题】Android 强制关闭 ProgressDialog【英文标题】:Android Force Close on ProgressDialog 【发布时间】:2011-06-13 17:26:37 【问题描述】:

我试图在抓取 RSS 提要时显示不确定的 ProgressDialog。我弹出对话框,但是一旦返回结果,我就会强制关闭。我怀疑适配器已填充并会更新 UI。代码如下。我的猜测正确吗?

        public void getRSS(String rss)
    

        new GetRSS().execute(rss);

    
    private class GetRSS extends AsyncTask<String, Void, Void>
    
        private ProgressDialog Dialog = new ProgressDialog(View2.this);

        protected void onPreExecute() 

            Dialog.setMessage("Please wait...");
            Dialog.show();
        

        protected void onPostExecute(Void nothing)
        
            Dialog.dismiss();
        

        protected Void doInBackground(String... rss) 
        URL feedUrl;
        try
            
                feedUrl = new URL(rss[0]);

                SyndFeedInput input = new SyndFeedInput();
                SyndFeed feed = input.build(new XmlReader(feedUrl));
                List entries = feed.getEntries();

                Iterator iterator = entries.listIterator();
                while (iterator.hasNext())
                    
                        SyndEntry ent = (SyndEntry) iterator.next();
                        String title = ent.getTitle();
                        //String uri = ent.getUri();
                        //d.add(uri);

                        SyndContent content = (SyndContent)ent.getContents().get(0);
                        d.add(content.getValue());
                        adapter.add(title);
                    
                adapter.notifyDataSetChanged();
            
        catch (MalformedURLException e)
            
                e.printStackTrace();
            
        catch (IllegalArgumentException e)
            
                e.printStackTrace();
            
        catch (FeedException e)
            
                e.printStackTrace();
            
        catch (IOException e)
            
                e.printStackTrace();
            
        return null;
        
    
    */

这里是堆栈转储 - 显然调用 notify 是问题所在。现在我只是无法确定在哪里调用通知:

01-22 12:02:28.701: ERROR/WindowManager(571): Activity com.digthisband.dtb.jg.View2 has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@43e6ae88 that was originally added here

01-22 12:02:28.701: ERROR/WindowManager(571): android.view.WindowLeaked: Activity com.digthisband.dtb.jg.View2 已泄露窗口 com.android.internal.policy.impl.PhoneWindow$最初在这里添加的 DecorView@43e6ae88 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.view.ViewRoot.(ViewRoot.java:247) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.view.Window$LocalWindowManager.addView(Window.java:424) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.Dialog.show(Dialog.java:241) 01-22 12:02:28.701: 错误/WindowManager(571): 在 com.digthisband.dtb.jg.View2$GetRSS.onPreExecute(View2.java:97) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.os.AsyncTask.execute(AsyncTask.java:391) 01-22 12:02:28.701: 错误/WindowManager(571): 在 com.digthisband.dtb.jg.View2.getRSS(View2.java:87) 01-22 12:02:28.701: 错误/WindowManager(571): 在 com.digthisband.dtb.jg.View2.onCreate(View2.java:68) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.os.Handler.dispatchMessage(Handler.java:99) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.os.Looper.loop(Looper.java:123) 01-22 12:02:28.701: 错误/WindowManager(571): 在 android.app.ActivityThread.main(ActivityThread.java:4627) 01-22 12:02:28.701: 错误/WindowManager(571): 在 java.lang.reflect.Method.invokeNative(Native Method) 01-22 12:02:28.701: 错误/WindowManager(571): 在 java.lang.reflect.Method.invoke(Method.java:521) 01-22 12:02:28.701: 错误/WindowManager(571): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 01-22 12:02:28.701: 错误/WindowManager(571): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 01-22 12:02:28.701: ERROR/WindowManager(571): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

【参考方案1】:

最好能显示错误LogCat,它会说明导致异常的原因。 我还注意到您在 doInBackground 方法中调用了 notifyDataSetChanged() - 您应该只在 UI 线程中调用它。

【讨论】:

你是绝对正确的——我已经删除了对 notifyDataSetChanged 的​​调用并且崩溃消失了。我也没有得到我的数据。但这是一个开始...... 嘿...嗯,是的。标准的做法是调用 publishProgress() 。这反过来将在 UI 线程中自动调用 onProgressUpdate(),您可以在其中调用 notifyDataSetChanged()。您将需要覆盖 onProgressUpdate()。

以上是关于android 怎么调用强制关闭的主要内容,如果未能解决你的问题,请参考以下文章

android“强制关闭”内存到底发生了啥

在Android中强制关闭

Android:如何在“强制关闭”后自动重启应用程序?

如何确定Android应用程序是不是被强制关闭?

在循环中使用 setBackgroundColor 和 setImageDrawable 时 Android 强制关闭 [关闭]

Android 强制关闭 ProgressDialog