在Android中,即使我们退出了所有的Activity。但是其应用程序并不能结束,系统还有继续保持其一段时间。 然而我们可以在 根Acitivity的onDestroy() 方法中,做一些操作来让该应用程序彻底退出,即进程结束。 我现在测试并有效的方法有 System.exit(0) 和 android.os.Process.killProcess(android.os.Process.myPid()) 这两种方法。网上有人反应这两种方法无效,我想他们可能是没在 根Acitivity 的onDestroy() 使用他们。 上面这两种方法在非根Activity中使用时,的确无效 。 不过理论上来说 根Acitivity 的onDestroy() 被调用的话,该进程一般也就结束了。
如果你还不知道什么样的 Acitivity 称之为为 根Acitivity 的话,请参阅《 Activity和Task的基本模型 》和《 Task和Activity相关的一些属性示例程序1:

protected void 
  
   super.onDestroy();
   
  System.exit(0); 
  //或android.os.Process.killProcess(android.os.Process.myPid());  
  Log.d(tag,"onDestroy");
   
  }


示例程序2(自己的Application中)    

private
     
    final
     
    static
     
    HandlerThread
     business0HandlerThread 
    =
     
    new
     
    HandlerThread
    (
    "Business0Handler"
    );
       
    private
     
    static
     
    Handler
     business0Handler
    ;
       
    public
     
    static
     
    Handler
     getBusiness0Handler
    ()
     
    {
           
    if
     
    (
    business0Handler 
    ==
     
    null
    )
     
    {
           
     
    synchronized
    (
    business0HandlerThread
    ){
    
        
      
    if
    (
    business0Handler
    ==
    null
    )
     
    {
        
    business0HandlerThread
    .
    start
    ();
        
    business0Handler 
    =
     
    new
     
    Handler
    (
    business0HandlerThread
    .
    getLooper
    ());
       
    }
           
     
    }
           
    }
           
    return
     business0Handler
    ;
       
    }
   

   
    
    /*
    
     * 在这里判断是否还有工作在进行
    
     */
    
    public
     
    boolean
     isAnyWorkGoing
    ()
     
    {
     
    return
     
    false
    ;
    
    }
    
    ActivityManager
     am
    ;
    
    public
     
    boolean
     shouldKill
    ()
     
    {
     
    if
     
    (
    isAnyWorkGoing
    ())
     
    {
      
    return
     
    true
    ;
     
    }
     
    else
     
    {
      
    if
     
    (
    am 
    ==
     
    null
    )
     
    {
       
    for
     
    (
    int
     i 
    =
     
    0
    ;
     i 
    <
     
    5
    ;
     i
    ++)
     
    {
        
    am 
    =
     
    (
    ActivityManager
    )
     getSystemService
    (
    Context
    .
    ACTIVITY_SERVICE
    );
        
    if
     
    (
    am 
    !=
     
    null
    )
         
    break
    ;
        
    try
     
    {
         
    Thread
    .
    sleep
    (
    50
    );
        
    }
     
    catch
     
    (
    InterruptedException
     e
    )
     
    {
     
        
    e
    .
    printStackTrace
    ();
        
    }
       
    }
      
    }
      
    List
    <
    RunningTaskInfo
    >
     runningTasks 
    =
     am
    .
    getRunningTasks
    (
    100
    );
      
    for
     
    (
    RunningTaskInfo
     task 
    :
     runningTasks
    )
     
    {
       
    ComponentName
     baseActivity 
    =
     task
    .
    baseActivity
    ;
       
    if
     
    (
    baseActivity 
    !=
     
    null
         
    &&
     task
    .
    baseActivity
    .
    getClassName
    ().
    startsWith
    (
           
    "cn.edu.edut.robin"
    ))
     
    {
        
    if
     
    (
    task
    .
    numRunning 
    >
     
    0
    )
     
    {
         
    Log
    .
    d
    (
    TAG
    ,
     task
    .
    baseActivity
    .
    getClassName
    ()
           
    +
     task
    .
    numRunning
    );
         
    flgKillLoop 
    =
     
    false
    ;
         
    return
     
    true
    ;
        
    }
       
    }
   

   
      
    }
     
    }
     
    return
     
    false
    ;
    
    }
   

   
    
    boolean
     flgKillLoop 
    =
     
    false
    ;
   

   
    
    public
     
    void
     signKill
    ()
     
    {
     
    flgKillLoop 
    =
     
    true
    ;
     
    getBusiness0Handler
    ().
    post
    (
    killRunable
    );
    
    }
   

   
    
    Runnable
     killRunable 
    =
     
    new
     
    Runnable
    ()
     
    {
   

   
     
    @Override
     
    public
     
    void
     run
    ()
     
    {
      
    if
     
    (
    shouldKill
    ())
     
    {
       
    android
    .
    os
    .
    Process
    .
    killProcess
    (
    android
    .
    os
    .
    Process
    .
    myPid
    ());
      
    }
     
    else
     
    if
     
    (
    flgKillLoop
    )
     
    {
       
    getBusiness0Handler
    ().
    postDelayed
    (
    killRunable
    ,
     
    60
     
    *
     
    1000
    );
      
    }
     
    }
   

   
    
    };