Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 程序退出的辦法以及監聽並處理用戶按下back鍵的方法

Android 程序退出的辦法以及監聽並處理用戶按下back鍵的方法

編輯:關於Android編程

在Android中退出程序比較麻煩,尤其是在多個Activity的程序中,在2.2之前可以采用如下代碼退出程序:

Java代碼

 

 

[java]
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);   
am.restartPackage(getPackageName());   

    ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE); 
    am.restartPackage(getPackageName()); 


此種方法是一種最方便和最簡單的退出程序的辦法,但是在2.2和2.2之後就不能用了,那麼如果我們要退出程序有4種辦法:

采用content view棧:如果程序是多界面,但是又沒有強制要求每一個界面一個Activity,可以將每個界面設計為一個View,在界面切換時,只需要調用Activity的setContentView方法設置Activity的Contentview,這樣退出程序只需要將這一個Activity退出 就可以了,但是需要設計一個棧來管理content view。
可以自定義一個Activity的棧,在程序退出時將棧中的所有的Activity進行finish,這種方法,我以前的文章中有詳述。
前兩種方法的精髓之處都是需要自己設計一個棧用來管理界面或者Activity,這樣程序就比較復雜一些。 第3中方法就是,先讓程序到Home界面,然後再將process殺死:代碼如下:

[java]
Intent intent = new Intent(Intent.ACTION_MAIN);   
            intent.addCategory(Intent.CATEGORY_HOME);   
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
            startActivity(intent);   
            android.os.Process.killProcess(Process.myPid());   

    Intent intent = new Intent(Intent.ACTION_MAIN); 
                intent.addCategory(Intent.CATEGORY_HOME); 
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                startActivity(intent); 
                android.os.Process.killProcess(Process.myPid()); 


4.還有一種就是使用方法是使用Android的Broadcast機制。在所有的Activity中注冊退出程序的消息,當收到消息時調用finish方法。  然後再有退出程序功能的Activity上廣播關閉消息。代碼如下:

 

 

[java]
package com.kingtone.activity;   
   
import android.app.Activity;   
import android.content.BroadcastReceiver;   
import android.content.Context;   
import android.content.Intent;   
import android.content.IntentFilter;   
/** 
 * 所有Activity的父類,用來注冊退出程序的廣播事件, 
 * 並且對收到的退出程序事件進行處理 
 * @author Administrator 
 * 
 */   
public class CommonActivity  extends Activity {   
       
    //廣播的內部類,當收到關閉事件時,調用finish方法結束activity    
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {   
        @Override   
        public void onReceive(Context context, Intent intent) {   
            finish();   
        }   
    };   
   
    @Override   
    public void onResume() {   
        super.onResume();   
        //在當前的activity中注冊廣播    
        IntentFilter filter = new IntentFilter();   
        filter.addAction(GlobalVarable.EXIT_ACTION);   
        this.registerReceiver(this.broadcastReceiver, filter);   
    }   
}   

    package com.kingtone.activity; 
     
    import android.app.Activity; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.IntentFilter; 
    /**
     * 所有Activity的父類,用來注冊退出程序的廣播事件,
     * 並且對收到的退出程序事件進行處理
     * @author Administrator
     *
     */ 
    public class CommonActivity  extends Activity { 
         
        //廣播的內部類,當收到關閉事件時,調用finish方法結束activity 
        private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
            @Override 
            public void onReceive(Context context, Intent intent) { 
                finish(); 
            } 
        }; 
     
        @Override 
        public void onResume() { 
            super.onResume(); 
            //在當前的activity中注冊廣播 
            IntentFilter filter = new IntentFilter(); 
            filter.addAction(GlobalVarable.EXIT_ACTION); 
            this.registerReceiver(this.broadcastReceiver, filter); 
        } 
    } 

 

在需要退出程序的Activity(CommonActivity的子類)中,退出程序代碼如下:

 

 

[java]
Intent intent = new Intent();   
intent.setAction(GlobalVarable.EXIT_ACTION); // 退出動作    
this.sendBroadcast(intent);// 發送廣播    
super.finish();   
//退出後台線程,以及銷毀靜態變量    
System.exit(0);   

    Intent intent = new Intent(); 
    intent.setAction(GlobalVarable.EXIT_ACTION); // 退出動作 
    this.sendBroadcast(intent);// 發送廣播 
    super.finish(); 
    //退出後台線程,以及銷毀靜態變量 
    System.exit(0); 

 

監聽並處理用戶按下back鍵的方法

 

 

[java]
package com.example.android_test01; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
 
public class MainActivity extends Activity { 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    } 
 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        // TODO Auto-generated method stub  
        System.out.println("你按下了back1"); 
        show_simple(); 
        return super.onKeyDown(keyCode, event); 
    } 
    //先調用的onKeyDown(int keyCode, KeyEvent event)方法,然後調用的onBackPressed()方法;  
    @Override 
    public void onBackPressed() { 
        // TODO Auto-generated method stub  
        System.out.println("按下back,立刻退出activity時調用"); 
        super.onBackPressed(); 
    } 
     
 
     
    public void show_simple() 
    { 
        AlertDialog.Builder builder=new Builder(this); 
        builder.setTitle("歡迎使用本軟件"); 
        builder.setPositiveButton("確定", new OnClickListener() { 
             
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
                // TODO Auto-generated method stub  
            //退出應用;  
            finish(); 
            } 
        }); 
        builder.setNegativeButton("取消", new OnClickListener() { 
             
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
                // TODO Auto-generated method stub  
                 
            } 
        })  ; 
        builder.create().show(); 
         
         
    } 

package com.example.android_test01;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  System.out.println("你按下了back1");
  show_simple();
  return super.onKeyDown(keyCode, event);
 }
 //先調用的onKeyDown(int keyCode, KeyEvent event)方法,然後調用的onBackPressed()方法;
 @Override
 public void onBackPressed() {
  // TODO Auto-generated method stub
  System.out.println("按下back,立刻退出activity時調用");
  super.onBackPressed();
 }
 

 
 public void show_simple()
 {
  AlertDialog.Builder builder=new Builder(this);
  builder.setTitle("歡迎使用本軟件");
  builder.setPositiveButton("確定", new OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
   //退出應用;
   finish();
   }
  });
  builder.setNegativeButton("取消", new OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    
   }
  }) ;
  builder.create().show();
  
  
 }
}


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved