編輯:關於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();這樣就大功告成了
Android組件banner實現左右滑屏效果
什麼是banner組件?在許多Android應用上,比如愛奇藝客戶端、百度美拍、應用寶等上面,都有一個可以手動滑動的小廣告條,這就是banner,實際應用中的banner
微信舉報解除和微信解除限制的6個方法
在微信的運營過程中難免會出現一些無法預料的事情,比如在朋友圈被惡評,甚至被某些別有用
android listview 替代品recyclerview詳解
安卓v7支持包下的ListView替代品————RecyclerViewRecyclerView這個控件也出來很久了,相信
android編程實現局部界面動態切換的方法
本文實例講述了android編程實現局部界面動態切換的方法。分享給大家供大家參考,具體如下:局部界面固定,局部界面可以動態切換。效果如下:這個效果由3個layout構成m