編輯:關於Android編程
static void blockSignals() { sigset_t mask; int cc; sigemptyset(&mask); sigaddset(&mask, SIGQUIT); sigaddset(&mask, SIGUSR1); // used to initiate heap dump #if defined(WITH_JIT) && defined(WITH_JIT_TUNING) sigaddset(&mask, SIGUSR2); // used to investigate JIT internals #endif //sigaddset(&mask, SIGPIPE); cc = sigprocmask(SIG_BLOCK, &mask, NULL); assert(cc == 0); }
為何處理 quit Android 應用在收到異常終止信號(SIGQUIT)時,沒有遵循傳統 UNIX信號模型的默認行為 (終止 + core )。而是打印出trace 文件來,以利於記錄應用異常終止的原因。 Trace文件是 android davik 虛擬機在收到異常終止信號 (SIGQUIT)時產生的。 最經常的觸發條件是 android應用中產生了 FC (force close)。由於是該文件的產生是在 DVM裡,所以只有運行 dvm實例的進程(如普通的java應用,java服務等)才會產生該文件,android 本地應用 (native app,指 運行在 android lib層,用c/c++編寫的linux應用、庫、服務等)在收到 SIGQUIT時是不會產生 trace文件的。 參考 http://blog.csdn.net/rambo2188/article/details/7017241 3) 其他基於 bionic 的應用,都被 Android 動了手腳 android的實現是在 main 運行之前 先運行 debugger_init 方法,以實現攔截系統異常的幾個singal:SIGILL, SIGABRT, SIGBUS, SIGFPE, SIGSEGV和SIGPIPE, 代碼位於: bionic/linker/debugger.c, 把 debugger_init 注入 是通過在 linker 中做手腳 (bionic/linker/linker.c#2255) 而後當程序收到那幾個信號後,不是安裝 linux 缺省的處理方法,而是運行 debugger_init 中設定的信號處理方法,此方法就是和 debuggerd (守護進程)通信,通過socket告訴其 tid , 而後 debuggerd 通過調用 tid_attach_status= ptrace(PTRACE_ATTACH, tid, 0, 0); 這裡,debuggerd就掛上ptrace了,attach到出問題的線程,debuggerd進程就是被調試進程的父進程了,這樣debuggerd就可以控制tid線程了,最終生成 tomestone的信息
1.Navigation View對於應用程序,它代表著一個標准的導航菜單。菜單內容可以由菜單資源文件填充。NavigationView通常放在一個DrawerLayou
前置文章: 《Android 4.4 Kitkat Phone工作流程淺析(一)__概要和學習計劃》 《Android 4.4 Kitkat Phone工作
語法: . . .被包含在: 可以包含:描述:聲明實現了應用程序可視化用戶界面一部分的一個activity(activity子類),在清單文件中的必
引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式來開發移動手機APP,因此當頁面需要獲取手機內部某些信息時(例如:聯系人信息,坐