0
在向本機代碼(ARM)傳遞少量觸摸事件後,應用程序崩潰且沒有錯誤。只有當本地處理程序將消息寫入系統日誌並僅在從GLSurfaceView.onTouchEvent()調用它時,纔會發生這種情況。崩潰不會立即發生,但在2..10次調用後,似乎不在本機代碼中。雖然如果我刪除本地代碼中的LogI(...) - 它的工作原理。但是,如果我從另一個地方調用相同的本地函數(例如,從onDrawFrame()) - 它的工作原理沒有崩潰。Android:調用本地觸摸處理程序後進程已經死亡
Android模擬器(ARM)和真實設備都會發生這種情況。
這裏是我的Java代碼:
private class JNIView extends GLSurfaceView {
@Override public boolean onTouchEvent (MotionEvent event) {
Log.i(TAG,"{");
AppTouch(1, 2, 1); // <---- problem!
Log.i(TAG,"}");
return true;
}
....
private class MyRenderer implements GLSurfaceView.Renderer {
public void onDrawFrame(GL10 gl) {
AppDrawFrame();
AppTouch(1, 2, 1); // <---- NO problem!
}
...
public native void AppTouch(float x, float y, int action);
本地代碼(帕斯卡):
procedure AppTouch(env:PJNIEnv; this:jobject; x,y:jfloat; action:jint);
begin
try
LogI('AppTouch: '); // <<<------ Crashing depends on this line!!!
except
on e:exception do LogI('Error in AppTouch: '+ExceptionMsg(e));
end;
end;
的logcat:
I/ApusLib (18690): {
I/ApusLib (18690): AppTouch:
I/ApusLib (18690): }
I/ApusLib (18690): {
I/ApusLib (18690): AppTouch:
I/ApusLib (18690): }
I/ActivityManager( 953): Process apus.engine3 (pid 18690) has died.
I/WindowState( 953): WIN DEATH: Window{ae0e2160 u0 apus.engine3/apus.engine3.JNIActivity}
W/ActivityManager( 953): Force removing ActivityRecord{ae02b330 u0 apus.engine3/.JNIActivity}: app died, no saved state
W/WindowManager( 953): Force-removing child win Window{ae0e5a70 u0 SurfaceView} from container Window{ae0e2160 u0 apus.engine3/apus.engine3.JNIActivity}
D/Zygote ( 648): Process 18690 exited cleanly (255)
W/WindowManager( 953): Failed looking up window
W/WindowManager( 953): java.lang.IllegalArgumentException: Requested window [email protected] does not exist
沒有任何堆棧跟蹤或日誌中轉儲。有沒有辦法找出應用程序終止的確切原因?