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

來源:互聯網
上載者:User

在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();
  
  
 }
}


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.