亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

安卓中如何捕獲native信號異常,在c底層通過反射調用即將結束的Activity里的方法

安卓中如何捕獲native信號異常,在c底層通過反射調用即將結束的Activity里的方法

慕田峪9158850 2019-03-21 21:15:51
前言在安卓系統中運行,主要會碰到四種異常,造成應用崩潰退出runtimeException.ANR.自己寫的JNI類和C代碼產生的信號異常.第三方so包造成的Native信號異常.因為我們公司的應用要求絕對不能發生崩潰退出的現象,所以我著手處理這四種異常,前三者都很容易處理(可以通過繼承UncaughtExceptionHandler ;或者通過收聽系統ANR廣播;或者自己寫C中模仿java中的try-cache功能捕獲信號異常并處理),就第四種比較棘手.捕獲native異常需要做兩步工作在c底層捕獲到native信號收到native信號之后,在c層的信號處理函數,通過反射,調用java中的方法;在c底層捕獲到native信號也很簡單,使用signal注冊即可,收到native信號之后,就直接走到信號處理函數中了.最麻煩的是第二步,如何反射回去.目前碰到的問題目前的問題是,如何收到native信號之后,在c語言的信號處理函數中,通過反射調用Java中的方法.普通的c層通過反射調用java層的方法也是沒有問題的,但是目前的問題是,在信號處理函數中,無法調用,或者是沒有效果,因為當捕獲到信號的時候,原來的進程馬上就要關閉了.我目前的試過的方法有在信號處理函數中,調用原Activity的方法,不好用在信號處理函數中,調用另一個進程的Activity的方法(在清單文件中配置process),不好用.在信號處理函數中,拋出異常,拋不出去.在信號處理函數中,拋出異常(提前取消默認的關閉操作),可以拋出,但是不會被java層的異常捕獲類所抓住(但是不是在信號處理函數中拋的,是可以被抓住并處理的).
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

(env)->CallVoidMethod(env, obj, methodID, (env)->NewStringUTF(env, "你好世界"));在錯誤發生之前是可以回調到的,但是異常發生后就回調不到了


查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 713 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號