編輯:關於Android編程
日志是為了方便記錄程序的各種異常情況,方便以後對程序的維護的修補,一個程序不可能做到百分百健壯和完美,所以有必要在代碼中保存日志,方便維護。Java線程類提供了一個接口UncaughtExceptionHandler,Thread.setDefaultUncaughtExceptionHandler(handler)設置當線程由於未捕獲到異常而突然終止,並且沒有為該線程定義其他處理程序時所調用的默認處理程序。
所以我們可以繼承UncaughtExceptionHandler, 在handler實現對日志的讀寫
public class CrashHandler implements UncaughtExceptionHandler { // 系統默認的UncaughtException處理 private Thread.UncaughtExceptionHandler mDefaultHandler; public CrashHandler() { mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); } @Override public void uncaughtException(Thread thread, Throwable ex) { try { // 創建日志文件 File file = createCreashLogFile(); // 寫入日志文件 if (file != null && file.exists()) { writeLog(file, ex); } } catch (Exception e) { LogUtils.w("", e); } // 將異常拋給系統處?? mDefaultHandler.uncaughtException(thread, ex); } private void writeLog(File logFile, Throwable ex) { PrintStream printStream = null; FileOutputStream fos = null; // 寫入日志文件 try { fos = new FileOutputStream(logFile); printStream = new PrintStream(fos); ex.printStackTrace(printStream); } catch (Exception e) { LogUtils.w("", e); } finally { closeQuietly(printStream); closeQuietly(fos); } } private void closeQuietly(OutputStream os) { if (os != null) { try { os.close(); } catch (IOException e) { LogUtils.w("", e); } } } /** 創建??個空白的崩潰日志文件 */ public static File createCreashLogFile() throws IOException { if (!isExternalStorageAvaliable()) { // ??查存儲是否可?? return null; } File directory = new File(Environment.getExternalStorageDirectory() + "/ViolationQuery/crash_log"); if (!directory.exists()) { directory.mkdirs(); } File file = new File(directory, createCrashLogFileName()); if (file.exists()) { file.delete(); } file.createNewFile(); return file; } /** 存儲是否可用 */ public static boolean isExternalStorageAvaliable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } else { return false; } } private static String createCrashLogFileName() { String dateString = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); return "CrashLog_" + dateString + ".txt"; } }
public class CrashManager { public static void start() { // 設置異常處理實例 CrashHandler handler = new CrashHandler(); Thread.setDefaultUncaughtExceptionHandler(handler); } }
然後在Application中調用Application中CrashManager.start();這樣就大功告成了
什麼是banner組件?在許多Android應用上,比如愛奇藝客戶端、百度美拍、應用寶等上面,都有一個可以手動滑動的小廣告條,這就是banner,實際應用中的banner
在微信的運營過程中難免會出現一些無法預料的事情,比如在朋友圈被惡評,甚至被某些別有用
安卓v7支持包下的ListView替代品————RecyclerViewRecyclerView這個控件也出來很久了,相信
本文實例講述了android編程實現局部界面動態切換的方法。分享給大家供大家參考,具體如下:局部界面固定,局部界面可以動態切換。效果如下:這個效果由3個layout構成m