編輯:關於Android編程
用過安卓手機的用戶以及安卓開發者們會時長碰到程序異常退出的情況,普通用戶遇到這種情況,肯定非常惱火,甚至會罵一生垃圾軟件,然後卸載掉。那麼開發者們在開發過程中遇到這種情況給怎麼辦呢,當然,你不可能世界上的每個安卓手機你都要試試你的程序有沒有異常,這是無法辦到的事情,所以最好的辦法就是,當普通用戶遇到這種情況時,讓應用自動把錯誤信息發送到你的服務器,然後你去分析異常原因,這是不是一件很有意義的事情啊?本文參考自:http://blog.csdn.net/liuhe688/article/details/6584143,看到有些小伙伴們的一些需求,就是異常退出後,彈出一個對話框,讓用戶來選擇是否發送錯誤信息,這是一個好的想法,有些童鞋可能立馬想到了AlertDialog,但是實際情況呢,根本沒反應,AlertDialog並沒有彈出來,這是為什麼呢?其實異常的時候,整個應用就已經退出了,與這個應用相關的所有的Activity都已被銷毀,AlertDialog當然不會再起作用,所以我們要換一種思路,當程序異常時,讓其跳轉到另一個Activity,並把錯誤信息傳遞到這個Activity中,並在這裡讓用戶選擇是否發送錯誤信息,但有些同學說,我要的是對話框,不是一整個界面,這好辦啊,把Activity整成對話框樣式不就可以了嗎?(如何設置Dialog樣式的Activity,請看:點這裡)
自定義的異常捕獲請看原文,或者下載我的源碼,實現步驟就是啟動主Activity時同時啟動一個Service,把跳轉到窗口化的Activity的方法放進Service,在捕獲到異常時,執行這個方法。
TestService.java
public class TestService extends Service { private static TestService mInstance = null; @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); mInstance = this; } public static TestService getInstance() { return mInstance; } public void sendError(final String message){ Intent intent = new Intent(this, SendErrorActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("msg", message); startActivity(intent); stopSelf(); } }
異常捕獲時的處理:CrashHandler.java
/** * 自定義錯誤處理,收集錯誤信息 發送錯誤報告等操作均在此完成. * * @param ex * @return true:如果處理了該異常信息;否則返回false. */ private boolean handleException(Throwable ex) { if (ex == null) { return false; } new Thread() { @Override public void run() { Looper.prepare(); TestService.getInstance().sendError("error:made by byl"); Looper.loop(); } }.start(); //收集設備參數信息 collectDeviceInfo(mContext); //保存日志文件 saveCrashInfo2File(ex); return false; }
發送錯誤的Activity:
public class SendErrorActivity extends Activity implements OnClickListener{ private Button ok,cancel; private String error_msg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loginoutinfo); getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); ok=(Button) findViewById(R.id.ok); cancel=(Button) findViewById(R.id.cancel); error_msg=getIntent().getStringExtra("msg"); ok.setOnClickListener(this); cancel.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ok: Toast.makeText(this, "發送成功("+error_msg+")", 1).show(); finish(); break; case R.id.cancel: finish(); break; default: break; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ){ return true; } return super.onKeyDown(keyCode, event); } }
如圖:
源碼下載地址:http://download.csdn.net/detail/baiyuliang2013/7784163
本篇文章介紹了android仿愛奇藝加載動畫實例,具體代碼如下:效果圖:用到的知識點: Path ValueAnimator如果對Path和ValueAnimator
學習目的: 1、掌握在Android中如何插入圖片 圖片的加入可以立刻讓您的程序增色不少,我們樣例選用一張Android機器人(picture.jpg),您可以使用自己的
本文實例講述了Android利用jsoup解析HTML頁面的方法。分享給大家供大家參考,具體如下:這節主要是講解jsoup解析HTML頁面。由於在android開發過程中
版本控制是項目開發過程中必不可少的部分,不管是個人還是團隊,靈活的使用版本控制將會使項目開發變得更加輕松。Android Studio集成了版本控制系統,目前支持CVS、