Java Android:进程在调用本机触摸处理程序后死亡

Java Android:进程在调用本机触摸处理程序后死亡,java,android,android-ndk,native,freepascal,Java,Android,Android Ndk,Native,Freepascal,将少量触控事件传递给本机代码(ARM)后,应用程序崩溃且无错误。仅当本机处理程序将消息写入系统日志,并且仅当从GLSURFACHEVIEW.onTouchEvent()调用该消息时,才会发生这种情况。崩溃不是立即发生的,而是在2..10次调用之后发生的,并且似乎不在本机代码中。虽然如果我在本机代码中删除LogI(…),它仍然有效。但是,如果我从另一个地方(例如,从onDrawFrame())调用同一个本机函数,它将不会崩溃 这在Android Emulator(ARM)和真实设备中都会发生 以下

将少量触控事件传递给本机代码(ARM)后,应用程序崩溃且无错误。仅当本机处理程序将消息写入系统日志,并且仅当从GLSURFACHEVIEW.onTouchEvent()调用该消息时,才会发生这种情况。崩溃不是立即发生的,而是在2..10次调用之后发生的,并且似乎不在本机代码中。虽然如果我在本机代码中删除LogI(…),它仍然有效。但是,如果我从另一个地方(例如,从onDrawFrame())调用同一个本机函数,它将不会崩溃

这在Android Emulator(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);

日志中没有任何堆栈跟踪或转储。有没有办法找出应用程序终止的确切原因?

我的本机库似乎存在线程问题。触摸处理程序可能是在绘图代码运行时从另一个线程调用的,并且某些内容已损坏

添加cthreads单元解决了这个问题

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; 
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 android.os.BinderProxy@ae0ea220 does not exist