做Android項目的時候發(fā)現(xiàn)一個問題:當(dāng)應(yīng)用程序退出了,點擊"設(shè)置"查看應(yīng)用程序,界面顯示著可以點擊"強制關(guān)閉".
我認(rèn)為造成這樣的原因是還有開啟的activity沒有被destroy,然后做調(diào)試,之后發(fā)現(xiàn)開啟的activity應(yīng)該是全部都被destroy了.但是結(jié)果還是顯示可以點擊"強制關(guān)閉".
由于這個問題我發(fā)現(xiàn)了一個更加嚴(yán)重的問題,那就是,在我應(yīng)用程序退出之后,系統(tǒng)并沒有釋放掉我應(yīng)用程序所占內(nèi)存.
之后在網(wǎng)上查解決辦法.說是有兩個:
方式一:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
System.exit(0);
方式二:
android.os.Process.killProcess(android.os.Process.myPid());
有的人說可以結(jié)束掉應(yīng)用程序,但是不知道什么原因,我在試用了這兩個方法之后都還是不能結(jié)束掉我的應(yīng)用程序.
我在在點擊"設(shè)置"查看我應(yīng)用的時候,界面還是顯示可以點擊"強制關(guān)閉".
但是,用這兩個方法是可以釋放掉應(yīng)用程序所占內(nèi)存的.
嚴(yán)重的問題解決了,那個可以點擊"強制關(guān)閉"的問題貌似也不會造成什么影響.所以這個問題我也沒解決了.
最后說下這兩種方式和在哪使用吧.
第一種方式是退出虛擬機,使用這種方式,要注意的是,如果設(shè)備裝有兩個或多個應(yīng)用中的activity的Category為HOME的
應(yīng)用,那么每當(dāng)退出這個應(yīng)用的時候,設(shè)備都會讓用戶選擇進(jìn)入到哪個應(yīng)用.
第二種方式是kill掉當(dāng)前應(yīng)用進(jìn)程.它不會發(fā)生讓用戶選擇進(jìn)入哪一個應(yīng)用這種情況.
在哪里使用的話,一般是在最后一個activity的onDestroy()方法中使用這兩種方法
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
// release application's RAM
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
System.exit(0);
}