宋体关闭完美退出应用程序

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

    

    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程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3050743.html