編輯:關於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音樂播放器制作寫的,沒看過的可以去看看其中這個效果(圓形ImageView和控件勻速旋轉):我前面的博客中寫到過我
1、概述Android提供了幾種動畫類型:View Animation 、Drawable Animation 、Property Animation 。View An
主要思想:將一個view設計成多層:背景層,含中獎信息等;遮蓋層,用於刮獎,使用關聯一個Bitmap的Canvas在該Bitmap上,使用它的canvas.drawPat
開發設計搞了一個帶圓形進度的進度條,在GitHub上逛了一圈,發現沒有,自己撸吧。先看界面效果:主要思路是寫一個繼承ProgressBar的自定義View,不廢話,直接上