編輯:關於Android編程
完全退出應用程序是一個基本的不能再基本的功能了,每個APP都會有這個功能,在java中這個功能很容易就實現了,這裡就不多說了,但在android裡,卻好像沒有那麼容易,查閱了網上相關的資料和博客,大概有以下幾種方法:
1.利用 PackageManager關閉所有本程序相關的進程,有人說2.2以上此法就失效了,沒有親自試過,不枉下斷言,感興趣的可以自己試.
2.利用java的exit()方法+android的killProcess(int pid); 小米3上親測不可用,只能關掉當前Activity,可能在其它android系統中可以,但至少說明不通用.
3.創建一個List將所有新啟動的Activity都加入到此列表中,在退出應用時,執行遍歷此集合,將所有Activity關閉,可以勉強實現退出整個應用,缺點:代價太大,要在整個應用的生命同期中維護一個List,極易產生內存堆積,處理不好就是內存溢出,親測會有內存堆積和溢出的現象,在小米1上溢出的更頻繁.而且如果未關閉的Activity比較多的話,退出時會明顯有一個卡的過程,用戶體驗不好.
以上三種方法要不是不通用,要不就是不好用,看到過一篇博客,推薦用廣播的方式去關閉整個應用程序,思路就是為所有的Activity創建一個父類,只要在父類中注冊一個自定義關閉應用廣播即可實現,仔細想了一下這個方法是可行的,只要在基類中動態注冊一個廣播就可實現這個功能.以下是自己寫的一個退出應用的demo,具體到不同的應用中,只要稍加調整就可以使用:
//自定義一個廣播接收器,用來接收應用程序退出廣播.
public class ExitAppReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (context != null) {
if (context instanceof Activity) {
((Activity) context).finish();
} else if (context instanceof FragmentActivity) {
((FragmentActivity) context).finish();
} else if (context instanceof Service) {
((Service) context).stopSelf();
}
}
}
}
//應用程序中所有Activity的基類
public class BaseActivity extends Activity {
private ExitAppReceiver exitReceiver = new ExitAppReceiver();
//自定義退出應用Action,實際應用中應該放到整個應用的Constant類中.
private static final String EXIT_APP_ACTION = "com.micen.exit_app";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerExitReceiver();
}
private void registerExitReceiver() {
IntentFilter exitFilter = new IntentFilter();
exitFilter.addAction(EXIT_APP_ACTION);
registerReceiver(exitReceiver, exitFilter);
}
private void unRegisterExitReceiver() {
unregisterReceiver(exitReceiver);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unRegisterExitReceiver();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
}
//最後在要退出App的方法中添加以下發送廣播代碼即可.
Intent intent = new Intent();
intent.setAction(EXIT_APP_ACTION);
sendBroadcast(intent);
這個方法是我認為目前最好的退出整個應用的方法,即不會產生內存堆積,退出整個應用的時間也很短,提高了用戶體驗,實現起來也很簡單.
Android音樂播放器制作(三)加入控制台
運行效果 這篇博客還是接著上一篇Android音樂播放器制作寫的,沒看過的可以去看看其中這個效果(圓形ImageView和控件勻速旋轉):我前面的博客中寫到過我
Android Property Animation
1、概述Android提供了幾種動畫類型:View Animation 、Drawable Animation 、Property Animation 。View An
Android 自定義View 實現刮刮卡效果
主要思想:將一個view設計成多層:背景層,含中獎信息等;遮蓋層,用於刮獎,使用關聯一個Bitmap的Canvas在該Bitmap上,使用它的canvas.drawPat
Android帶圓形數字進度的自定義進度條示例
開發設計搞了一個帶圓形進度的進度條,在GitHub上逛了一圈,發現沒有,自己撸吧。先看界面效果:主要思路是寫一個繼承ProgressBar的自定義View,不廢話,直接上