整个Java应用程序成为从Java线程的C函数调用
问题描述:
我已经定义了这样的Android的Java类,其中本地函数baresipStart()
永远不会终止后反应迟钝:整个Java应用程序成为从Java线程的C函数调用
package com.tutpro.baresip;
public class BaresipThread extends Thread {
public void start() {
baresipStart();
}
public void kill() {
baresipStop();
}
public native void baresipStart();
public native void baresipStop();
}
我再从另一个Java类调用其start()
功能:
BaresipThread thread;
thread = new BaresipThread();
thread.start();
结果是baresipStart()
功能开始运行良好,但应用程序的其余部分变得完全没有反应。
为什么会这样以及如何修复代码以便baresipStart()
函数在后台运行而不停止所有其他活动?
答
Thread.start()
负责实际创建新的执行线程并将其设置为正在运行。通过重写它,就会导致它在调用start()
的线程中运行baresipStart()
,。
而不是覆盖start()
,您应该覆盖run()
。这个方法定义了在新的执行线程中要执行的工作。
此外,如果本地方法baresipStart()
确实从来没有返回那么你有一个问题。当它有任何活动线程时,您的应用程序无法终止。假设您打算让baresipStop()
导致线程完成,那么当调用baresipStop()
终止执行时,您应该安排baresipStart()
返回(或抛出未经检查的异常)。但是请注意,这些本地方法需要是线程安全的,因为它们将被不同的Java线程调用。
答
感谢您的解释。我通过去除BaresipThread对象共和与此替换上面的三条线开始新baresip螺纹:
new Thread(new Runnable() {
public void run() {
baresipStart();
}
}).start();
用户可以停止通过其用户界面得到的处理之后,应用程序被终止。