最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)中優(yōu)秀的app 異常處理機制

 更新時間:2015年12月10日 11:14:00   投稿:hebedich  
這篇文章主要介紹了Android開發(fā)中優(yōu)秀的app 異常處理機制 的相關資料,需要的朋友可以參考下

一個好的app 異常處理機制 我認為應該至少包含以下幾個功能:

1.能把錯誤信息上傳到服務器  讓開發(fā)者可以持續(xù)改進app

2.錯誤信息至少應該包含 是否在主進程 是否在主線程 等可以幫助程序員定位的信息

3.最好包含手機硬件及軟件信息。

4.主進程引發(fā)的異常 最好交由系統(tǒng)自己處理 也就是讓用戶可以感知到 那種(當然你也可以自己定義一套更有意思的感知系統(tǒng)對話框等,具體可參考各種有意思的404界面)

5.子進程引發(fā)的異常最好別讓用戶感知到。比如push之類的 這種 和用戶感知弱關聯(lián)的這種。最好發(fā)生異常就直接kill掉即可。不要再交給系統(tǒng)處理。

下面上代碼。

package com.example.administrator.exceptiontest;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;

/**
 * Created by Administrator on 2015/12/9.
 */
public class BaseApplication extends Application {

  public static Context mContext;
  //默認的異常處理
  public static Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler;

  @Override
  public void onCreate() {
    super.onCreate();
    mContext = this;
    //先取得默認的異常處理handler
    defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
    Thread.setDefaultUncaughtExceptionHandler(new BaseUncaughtExceptionHandler());
  }


}

package com.example.administrator.exceptiontest;

import android.app.ActivityManager;
import android.content.Context;
import android.os.Looper;

/**
 * Created by Administrator on 2015/12/9.
 */
public class Utils {

  /**
   * 判斷是否在主線程中執(zhí)行 如果是返回true 不是返回false
   */
  public static boolean isInMainThread() {
    //注意這個地方 我們無法一定可以取得myLooper的值的 比如說 你的thread 沒有綁定消息循環(huán)
    //那你的mylooper就返回的一定是null了,只有綁定了以后才會返回相應的值
    return Looper.myLooper() == Looper.getMainLooper();
  }


  //判斷是否是主進程 如果是 就返回true 否則返回false
  public static boolean isMainProcess(Context context)
  {
    return context.getPackageName().equals(getProcessName(context));
  }

  //取得進程名
  public static String getProcessName(Context context) {
    String currentProcessName = "";
    int pid = android.os.Process.myPid();
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
      if (processInfo.pid == pid) {
        currentProcessName = processInfo.processName;
        break;
      }
    }
    return currentProcessName;
  }

}

package com.example.administrator.exceptiontest;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
/**
 * Created by Administrator on 2015/12/9.
 */
public class BaseUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
  @Override
  public void uncaughtException(Thread thread, Throwable ex) {
    Writer resultWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(resultWriter);
    ex.printStackTrace(printWriter);
    StringBuffer sb = new StringBuffer();
    sb.append("是否在主線程中發(fā)生異常" + Utils.isInMainThread() + "\n");
    sb.append("是否在主進程中發(fā)生異常" + Utils.isMainProcess(BaseApplication.mContext) + "\n");
    String errorReport = sb.toString() + resultWriter.toString();
    //這個地方最好把收集到的錯誤信息日志 上傳至服務器 便于開發(fā)者定位修改問題。
    //如果是主進程發(fā)生了異常 那還是交給系統(tǒng)自己默認的異常處理來做。讓用戶感知到,否則用戶啥都不知道 體驗并不好
    //你當然也可以自己定義特殊的錯誤提示 比如一些有意思的dialog什么的
    if (Utils.isMainProcess(BaseApplication.mContext)) {
      BaseApplication.defaultUncaughtExceptionHandler.uncaughtException(thread, ex);
    } else {
      //如果是子進程發(fā)生異常 不要給提示 直接殺掉子進程最好 別讓用戶感知到
      android.os.Process.killProcess(android.os.Process.myPid());
    }
  }

}

相關文章

  • android 實現(xiàn)APP中改變頭像圖片的實例代碼

    android 實現(xiàn)APP中改變頭像圖片的實例代碼

    這篇文章主要介紹了android 實現(xiàn)APP中改變頭像圖片的實例代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Android中ImageCropper矩形、圓形 裁剪框的實現(xiàn)方法

    Android中ImageCropper矩形、圓形 裁剪框的實現(xiàn)方法

    這篇文章主要給大家介紹了關于Android中ImageCropper矩形、圓形 裁剪框的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2018-07-07
  • Android 自定義彈性ListView控件實例代碼(三種方法)

    Android 自定義彈性ListView控件實例代碼(三種方法)

    關于在Android中實現(xiàn)ListView的彈性效果,有很多不同的方法,網(wǎng)上一搜,也有很多,下面貼出在項目中經(jīng)常用到的兩種實現(xiàn)ListView彈性效果的方法(基本上拿來就可以用),需要的朋友參考下本段代碼
    2016-01-01
  • Android使用AlertDialog實現(xiàn)對話框

    Android使用AlertDialog實現(xiàn)對話框

    本文主要介紹了Android使用AlertDialog實現(xiàn)對話框的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Flutter中顯示條件Widget的實現(xiàn)方式

    Flutter中顯示條件Widget的實現(xiàn)方式

    在 Flutter 日常開發(fā)中經(jīng)常會遇見這樣的需求,如: 只有用戶是 VIP 時,才能展示某個入口或者某個模塊,這樣的需求在開發(fā)業(yè)務需求中多如牛毛,那你是如何來優(yōu)雅的實現(xiàn)的呢,本文將給大家介紹Flutter中顯示條件Widget的實現(xiàn)方式,需要的朋友可以參考下
    2024-04-04
  • Android自定義videoview仿抖音界面

    Android自定義videoview仿抖音界面

    這篇文章主要為大家詳細介紹了Android自定義videoview仿抖音界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android React Native原生模塊與JS模塊通信的方法總結(jié)

    Android React Native原生模塊與JS模塊通信的方法總結(jié)

    這篇文章主要介紹了Android React Native原生模塊與JS模塊通信的方法總結(jié)的相關資料,需要的朋友可以參考下
    2017-02-02
  • Android實現(xiàn)儀表盤效果

    Android實現(xiàn)儀表盤效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)儀表盤效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android中的設計模式

    Android中的設計模式

    常用的設計模式有以下八種:單例、工廠、觀察者、代理、命令、適配器、合成、訪問者。下面通過本文給大家介紹下android中的設計模式,感興趣的朋友一起看看吧
    2016-09-09
  • Android編程自定義Notification實例分析

    Android編程自定義Notification實例分析

    這篇文章主要介紹了Android編程自定義Notification的用法,結(jié)合實例形式簡單分析了自定義Notification的具體功能與實現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12

最新評論

沂水县| 元谋县| 固阳县| 交口县| 商丘市| 嘉定区| 仁寿县| 博乐市| 海阳市| 昆明市| 原平市| 自贡市| 长治市| 太康县| 大同县| 阳原县| 万安县| 稻城县| 且末县| 化隆| 定边县| 墨竹工卡县| 山西省| 长沙县| 四会市| 松滋市| 行唐县| 新平| 南宫市| 揭阳市| 马山县| 长兴县| 沙坪坝区| 斗六市| 开化县| 南陵县| 永修县| 慈利县| 寿宁县| 阜南县| 河东区|