zoukankan      html  css  js  c++  java
  • Android如果应用中每个页面都有“首页”“退出” 处理方法

    所以为了通用想到了另外一种方法,就是当我们点击“退出程序”菜单时,可以从当前Activity跳转到主Activity(就是我们打开程序最先启动的那个Activity),通过Intent告诉主Activity我要退出程序,然后主Activity调用finish()方法即可。由于这一过程很短暂,以致于我们没观察到Activity有任何切换就退出程序了!

    同样为了让大家更容易理解,我做了一个Demo.为了省事,程序运行时我直接就从MainActivity跳转到BActivity,在BActivity有个“退出程序”菜单,点击会退出程序。具体过程如下:

    定义一个工具类Sysutil用来退出程序,这样定义好处可以在多个Activity的时候复用,代码如下:

    其中: intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP) 表示,开启目标activity时,会清理栈中的其他activity. 

    在应用中如果要回到首页,也可以用这这个flag.

    1. package com.tutor.exit;  
    2. import android.app.ActivityManager;  
    3. import android.content.Context;  
    4. import android.content.Intent;  
    5. public class SysUtil {  
    6.     public static final int  EXIT_APPLICATION = 0x0001;  
    7.       
    8.     private Context mContext;  
    9.       
    10.     public SysUtil(Context context){  
    11.         this.mContext = context;  
    12.     }  
    13.       
    14.     //完全退出应用  
    15.     public void exit(){  
    16.           
    17. //      1.5 - 2.1之前下面两行是ok的,2.2之后就不行了,所以不通用  
    18. //      ActivityManager am = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);  
    19. //      am.restartPackage("com.tutor.exit");  
    20.           
    21.         Intent mIntent = new Intent();  
    22.         mIntent.setClass(mContext, MainActivity.class);  
    23.         //这里设置flag还是比较 重要的  
    24.         mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    25.         //发出退出程序指示  
    26.         mIntent.putExtra("flag", EXIT_APPLICATION);  
    27.         mContext.startActivity(mIntent);  
    28.     }  
    29. }  

    修改MainActivity.java,代码如下:

    1. package com.tutor.exit;  
    2. import android.app.Activity;  
    3. import android.content.Intent;  
    4. import android.os.Bundle;  
    5. public class MainActivity extends Activity {  
    6.     @Override  
    7.     public void onCreate(Bundle savedInstanceState) {  
    8.         super.onCreate(savedInstanceState);  
    9.         setContentView(R.layout.main);       
    10.     }  
    11.       
    12.    //这里用来接受退出程序的指令   
    13.     @Override  
    14.     protected void onStart() {  
    15.         int flag = getIntent().getIntExtra("flag"0);  
    16.         if(flag == SysUtil.EXIT_APPLICATION){  
    17.             finish();  
    18.         }  
    19.         super.onResume();  
    20.           
    21.     }  
    22.     //程序启动后就进入了BActivity  
    23.     @Override  
    24.     protected void onResume() {  
    25.         Intent mIntent = new Intent();  
    26.         mIntent.setClass(this, BActivity.class);  
    27.         startActivity(mIntent);  
    28.         super.onStart();  
    29.     }  
    30.       
    31.       
    32.     //当activity是单例的时候,再次启动该activity就不会再调用 oncreate->onstart这些方法了  
    33.     @Override  
    34.     protected void onNewIntent(Intent intent) {  
    35.         int flag = getIntent().getIntExtra("flag"0);  
    36.         if(flag == SysUtil.EXIT_APPLICATION){  
    37.             finish();  
    38.         }  
    39.         super.onNewIntent(intent);  
    40.     }  
    41. }  

    新建一个Activity命名为BAcivity.java,记得要在配置文件里申明哦~代码如下:

    1. package com.tutor.exit;  
    2. import android.app.Activity;  
    3. import android.os.Bundle;  
    4. import android.view.Menu;  
    5. import android.view.MenuItem;  
    6. import android.widget.TextView;  
    7. public class BActivity extends Activity {  
    8.     public static final int MENU_EXITAPPLICATION = Menu.FIRST;  
    9.       
    10.     @Override  
    11.     protected void onCreate(Bundle savedInstanceState) {  
    12.         super.onCreate(savedInstanceState);  
    13.           
    14.         TextView mTextView = new TextView(this);  
    15.         mTextView.setText("Welcome to Frankie's blog.");  
    16.         setContentView(mTextView);  
    17.     }  
    18.       
    19.     @Override  
    20.     public boolean onCreateOptionsMenu(Menu menu) {  
    21.         menu.add(0, MENU_EXITAPPLICATION, 0,"退出程序");  
    22.         return super.onCreateOptionsMenu(menu);  
    23.     }  
    24.       
    25.       
    26.     @Override  
    27.     public boolean onOptionsItemSelected(MenuItem item) {  
    28.         if(item.getItemId() == MENU_EXITAPPLICATION){  
    29.             //其他Activity退出程序这样调用就ok了  
    30.             SysUtil mSysUtil= new SysUtil(BActivity.this);  
    31.             mSysUtil.exit();  
    32.         }  
    33.         return super.onOptionsItemSelected(item);  
    34.     }  
    35. }   

    运行程序,直接进入了BActivity,

    点击退出程序菜单,管你SDK是什么版本,就可以完全退出程序啦

    这里要说明一下,如果我们的主Activity是单例模式的话,也就是launcheMode="singleTop|singleTask"如下面代码:

    1. <activity android:name=".MainActivity"  
    2.               android:launchMode="singleTop"  
    3.                android:label="@string/app_name">  
    4.          <intent-filter>  
    5.              <action android:name="android.intent.action.MAIN" />  
    6.              <category android:name="android.intent.category.LAUNCHER" />  
    7.          </intent-filter>  
    8.      </activity>  

    出自 : http://blog.csdn.net/Android_Tutor/archive/2011/03/26/6279843.aspx

  • 相关阅读:
    SAP S/4HANA extensibility扩展原理介绍
    SAP CRM系统订单模型的设计与实现
    使用nodejs代码在SAP C4C里创建Individual customer
    SAP Cloud for Customer Account和individual customer的区别
    Let the Balloon Rise map一个数组
    How Many Tables 简单并查集
    Heap Operations 优先队列
    Arpa’s obvious problem and Mehrdad’s terrible solution 思维
    Passing the Message 单调栈两次
    The Suspects 并查集
  • 原文地址:https://www.cnblogs.com/oakpip/p/2055422.html
Copyright © 2011-2022 走看看