【Android】【轉】Android程序退出徹底關閉進程的方法


    因為發現光調用finish()方法后 程序中所啟動的線程依舊在后台運行——Android的特點之一——否則也不會出現諸多用於關閉進程的工具。搜索了相關資料,大致有以下幾種方法可以用於完全關閉進程的方式。其中第一種方法作者已經用過,的確是可行的。

    第一種方法:

android.os.Process.killProcess(android.os.Process.myPid()); 

 

    第二種方法:在onDestroy函數中加入代碼

System.exit(0); 
 

    第三種方法:

ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
manager.killBackgroundProcesses(package); 
 

 

      第四種方法:

manager.restartPackage(package);
 

    第五種方法:

Intent MyIntent = new Intent(Intent.ACTION_MAIN); 
MyIntent.addCategory(Intent.CATEGORY_HOME); 
startActivity(MyIntent); 
finish(); 

    這個方法好像只是退回到桌面…

 

    第六種方法:使用廣播機制

public abstract class EnterActivity extends BaseActivity {  
...  
    // 寫一個廣播的內部類,當收到動作時,結束activity  
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            close();  
            unregisterReceiver(this); // 這句話必須要寫要不會報錯,不寫雖然能關閉,會報一堆錯  
        }  
    };  
  
    @Override  
    public void onResume() {  
        super.onResume();  
  
        // 在當前的activity中注冊廣播  
        IntentFilter filter = new IntentFilter();  
        filter.addAction(Attribute.PAGENAME);  
        registerReceiver(this.broadcastReceiver, filter); // 注冊  
    }  
  
    /** 
     * 關閉 
     */  
    public void close() {  
        Intent intent = new Intent();  
        intent.setAction(Attribute.PAGENAME); // 說明動作  
        sendBroadcast(intent);// 該函數用於發送廣播  
        finish();  
    }  
...  
}  

    請注意,這段代碼中缺少了注銷代碼,(unregisterReceiver)這個是必須要加的。

 

參考來源:

http://johncookie.iteye.com/blog/890734

http://www.iteye.com/topic/1112269


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM