做Android項(xiàng)目的時(shí)候發(fā)現(xiàn)一個(gè)問(wèn)題:當(dāng)應(yīng)用程序退出了,點(diǎn)擊"設(shè)置"查看應(yīng)用程序,界面顯示著可以點(diǎn)擊"強(qiáng)制關(guān)閉".
我認(rèn)為造成這樣的原因是還有開啟的activity沒(méi)有被destroy,然后做調(diào)試,之后發(fā)現(xiàn)開啟的activity應(yīng)該是全部都被destroy了.但是結(jié)果還是顯示可以點(diǎn)擊"強(qiáng)制關(guān)閉".
由于這個(gè)問(wèn)題我發(fā)現(xiàn)了一個(gè)更加嚴(yán)重的問(wèn)題,那就是,在我應(yīng)用程序退出之后,系統(tǒng)并沒(méi)有釋放掉我應(yīng)用程序所占內(nèi)存.
之后在網(wǎng)上查解決辦法.說(shuō)是有兩個(gè):
方式一:
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());
有的人說(shuō)可以結(jié)束掉應(yīng)用程序,但是不知道什么原因,我在試用了這兩個(gè)方法之后都還是不能結(jié)束掉我的應(yīng)用程序.
我在在點(diǎn)擊"設(shè)置"查看我應(yīng)用的時(shí)候,界面還是顯示可以點(diǎn)擊"強(qiáng)制關(guān)閉".
但是,用這兩個(gè)方法是可以釋放掉應(yīng)用程序所占內(nèi)存的.
嚴(yán)重的問(wèn)題解決了,那個(gè)可以點(diǎn)擊"強(qiáng)制關(guān)閉"的問(wèn)題貌似也不會(huì)造成什么影響.所以這個(gè)問(wèn)題我也沒(méi)解決了.
最后說(shuō)下這兩種方式和在哪使用吧.
第一種方式是退出虛擬機(jī),使用這種方式,要注意的是,如果設(shè)備裝有兩個(gè)或多個(gè)應(yīng)用中的activity的Category為HOME的
應(yīng)用,那么每當(dāng)退出這個(gè)應(yīng)用的時(shí)候,設(shè)備都會(huì)讓用戶選擇進(jìn)入到哪個(gè)應(yīng)用.
第二種方式是kill掉當(dāng)前應(yīng)用進(jìn)程.它不會(huì)發(fā)生讓用戶選擇進(jìn)入哪一個(gè)應(yīng)用這種情況.
在哪里使用的話,一般是在最后一個(gè)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);
}