zoukankan      html  css  js  c++  java
  • 宋体关闭完美退出应用程序

    本篇文章笔者在青岛逛街的时候突然想到的...近期就有想写几篇关于宋体关闭的文章,所以回家到之后就奋笔疾书的写出来发布了

        

        Android序程关闭法方有多种,网上说的好几种都不可取,比如

        1)、android.os.Process.killProcess(android.os.Process.myPid());

        试验证明这个法方只能关闭第一个AActivity,该法方不可取,试测手机为android v2.21

        2)、ActivityManager activityMgr=

        (ActivityManager)CActivity.this.getSystemService(ACTIVITY_SERVICE);

        activityMgr.restartPackage(getPackageName());

        这个法方也是不可以的关闭应用序程的,试测手机为android v2.21,不知道网上那些人的文章为什么说这么写可以,所以啊,弄技巧还得自己多手动

        前目总结的可行的法方如下:

        一、             每次跳转的时候,就关闭自身这个Activity

        种这法方在某个面页要需加载大批数据的情况下就不可取,因为,关闭了,下次还得重新到服务端获得。没有大批数据通信的情况下,种这情况是可取的。

            Intent intent=new Intent(AActivity.this,BActivity.class);

            startActivity(intent);

        AActivity.this.finish();

        System.exit(0);

         

        二、             个每activity的父类面里实现BroadCastReceiver,收到广播后关闭

        试验是从AActivity.java跳转到BActivity.java,然后再跳转到CActivity.java,最后在CActivity.java,点击关闭应用序程按钮。关闭应用。然后个每Activity都继承BaseActivity.javaBaseActivity.java册注一个广播接收器,收到广播后关闭自身这个Activity,同时取消册注以后的广播接收器。试验证明这个法方是可以退出应用的,但是不全完,在理管应用序程à正在运行 面里还是可以看到以后的应用的。

        1步、父类BaseActivity.java

        /**

         * 父类

         */

        package com.figo.helloworld;

         

        import android.app.Activity;

        import android.content.BroadcastReceiver;

        import android.content.Context;

        import android.content.Intent;

        import android.content.IntentFilter;

        import android.os.Bundle;

         

        /**

         * @author zhuzhifei

         *

         */

        public class BaseActivity extends Activity {

                 //这样个每Activity都有个广播接收器

                 private BroadcastReceiver mCloseRecver = new BroadcastReceiver() {

                           @Override

                           public void onReceive(Context context, Intent intent) {

                                    // TODO Auto-generated method stub

                                    if ("CLOSE_RECVER".equals(intent.getAction())) {

                                             ((Activity) context).finish();

                                    }

                           }

                 };

         

                 /** Called when the activity is first created. */

                 protected void onCreate(Bundle savedInstanceState) {

                           super.onCreate(savedInstanceState);

         

                           IntentFilter myIntentFilter = new IntentFilter();

                           myIntentFilter.addAction("CLOSE_RECVER");

                           // 册注广播

                           registerReceiver(mCloseRecver, myIntentFilter);

         

                 }

         

                 @Override

                 protected void onDestroy() {

                           // TODO Auto-generated method stub

                           super.onDestroy();

                           //个每activity自己的广播接收器在关闭以后activity的时候,取消该接收器

                           if(mCloseRecver!=null)

                           {

                                    this.unregisterReceiver(mCloseRecver);

                           }

                 }

                

        }

        2步、任何关闭的地方发送一个关闭的广播

        sendBroadcast(new Intent("CLOSE_RECVER"));

        三、             最优做法:同一搜集activity,退出时同一关闭

        路思:个每Activity OnCreate的时候,就参加ApplicationActivity组数面里去,然后任何一个地方退出的时候,用调Aplication一个exit法方,环循关闭个每Activity,同时记得System.exit(0),本试验也同法方二一样,A,B,C三个Activity,从A跳转到BB再跳转到C,然后再C点击一个退出应用按钮,用使全完退出以后应用。

        1步、创立自己的Application.java

        /**

         * 理管ActivityApplication

         */

        package com.figo.helloworld;

         

        import java.util.ArrayList;

         

        import android.app.Activity;

        import android.app.Application;

         

        /**

         * @author zhuzhifei

         *

         */

        public class MyApplication extends Application {

                 private ArrayList<Activity> allActivities = new ArrayList<Activity>();

                 private static MyApplication instance;

         

                 public static MyApplication getInstance() {

                           if (instance == null) {

                                    instance = new MyApplication();

                           }

                           return instance;

                 }

         

                 // 加添Activity到容器中

                 public void addActivity(Activity activity) {

                           allActivities.add(activity);

                 }

         

                 // 遍历全部Activityfinish

                 public void exit() {

                           for (Activity activity : allActivities) {

                                    activity.finish();

                           }

                           System.exit(0);//Android的序程只是让Activity finish()失落,而单纯的finish失落,退出不并全完

                           instance=null;//自身也空清

                 }

         

         

        }

        2步、创立各个Activity

        A面页AActivity.java

        /**

         * @author zhuzhifei

         *

         */

        public class AActivity extends Activity {

            private Button btnA;

            @Override

            protected void onCreate(Bundle savedInstanceState) {

               super.onCreate(savedInstanceState);

               setContentView(R.layout.a);

               btnA=(Button)findViewById(R.id.btnA);

        每日一道理
    “上下五千年,龙的看火不灭;古有愚公志,而今从头越…… ”站在新世纪的门槛上,我们的追求就是让祖国灿烂的喜悦飞扬在美好的明天……

               btnA.setOnClickListener(new OnClickListener() {

                  

                   @Override

                   public void onClick(View v) {

                      //A跳转到B面页

                      Intent intent=new Intent(AActivity.this,BActivity.class);

                      startActivity(intent);

                   }

               });

               //以后Activity加添到Activity组数中去

               MyApplication.getInstance().addActivity(this);

            }

         

        }

         

        B面页BActivity.java

        /**

         * @author zhuzhifei

         *

         */

        public class BActivity extends BaseActivity {

            private Button btnB;

            @Override

            protected void onCreate(Bundle savedInstanceState) {

               super.onCreate(savedInstanceState);

               setContentView(R.layout.b);

               btnB=(Button)findViewById(R.id.btnB);

               btnB.setOnClickListener(new OnClickListener() {

                  

                   @Override

                   public void onClick(View v) {

                      //B跳转到C面页

                      Intent intent=new Intent(BActivity.this,CActivity.class);

                      startActivity(intent);

                   }

               });

               //以后Activity加添到Activity组数中去

               MyApplication.getInstance().addActivity(this);

            }

        }

         

        C面页CActivity.java

         

        /**

         * @author zhuzhifei

         *

         */

        public class CActivity extends Activity {

              private Button btnC;

               @Override

               protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.c);

                   btnC=(Button)findViewById(R.id.btnC);

                   //退出应用序程事件

                   btnC.setOnClickListener(new OnClickListener() {

                      @Override

                      public void onClick(View v) {

                          //最优做法 法方一:Activity放在组数面里同一关闭

                          MyApplication.getInstance().exit();

                          //试验证明这个法方只能关闭第一个AActivity,该法方不可取,试测手机为android v2.21

        //                  android.os.Process.killProcess(android.os.Process.myPid());

                          //这个法方也是不可以的关闭应用序程的,不知道网上那些人的文章为什么还写可以,所以啊,弄技巧还得自己多手动

        //                ActivityManager activityMgr= (ActivityManager)CActivity.this.getSystemService(ACTIVITY_SERVICE);

        //                activityMgr.restartPackage(getPackageName());

                            //法方二:父类activity面里实现一个广播接收器,现发要需关闭的时候即关闭自己这个Activity

                          //试验证明以后式方是可以退出应用序程,但是在理管应用序程-->正在运行面里还可以见看以后应用

                     

                          //sendBroadcast(new Intent("CLOSE_RECVER"));

                           

                      }

                   });

                   //以后Activity加添到Activity组数中去

                   MyApplication.getInstance().addActivity(this);

               }

        }

        四、另外一种路思是在baseActivity.java面里的onResume()事件面里,如果现发是要需关闭序程,然后finish以后activity,因为,如果activity都不关闭,终最关闭一个的时候,会引起连锁反应,关闭一个的时候,它前面的另外一个就会到resume。具体做法是在application置设一个是不是退出的变量                                               

            @Override
        protected void onResume() {
            super.onResume();
               Boolean isExit = (Boolean) getMyApplication().get("EXIT_APP");
            if (isExit != null && isExit)
             {
                finish();
             }
        }

         

         

    文章结束给大家分享下程序员的一些笑话语录: 小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!

  • 相关阅读:
    避免Node.js中回调地狱
    XSS和CSRF攻击
    浅析SPDY
    移动端的图片优化
    js中的事件委托技术
    js的5种继承方式——前端面试
    深入理解前端跨域问题的解决方案——前端面试
    javascript中“use strict”的好处和坏处
    Http请求中POST与GET的区别——前端面试
    滚动条离底部的距离小于某个值
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3050743.html
Copyright © 2011-2022 走看看