我定义了这种Android Java类,其中本机函数baresipStart()永远不会结束:
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()函数在后台运行,而不会停止所有其他活动?
发布于 2017-10-14 00:46:16
Thread.start()负责实际创建新的执行线程并将其设置为运行。通过像您所做的那样覆盖它,您可以使它在调用start()的线程中运行baresipStart()。
您应该覆盖run(),而不是覆盖start()。此方法定义了要在新的执行线程中执行的工作。
此外,如果本机方法baresipStart()确实永远不会返回,那么您就有问题了。当您的应用程序有任何活动线程时,它不能终止。假设您打算让baresipStop()使线程结束,那么您应该安排baresipStart()在调用baresipStop()终止执行时返回(或抛出未检查的异常)。但是,一定要知道,这些本机方法需要是线程安全的,因为它们将被不同的Java线程强制调用。
发布于 2017-10-15 19:17:32
谢谢你的解释。我通过完全删除BaresipThread对象并用下面的代码替换上面的三行代码来启动新的object SIP线程:
new Thread(new Runnable() {
public void run() {
baresipStart();
}
}).start();用户可以通过其用户界面停止生成的进程,然后终止应用程序。
https://stackoverflow.com/questions/46734275
复制相似问题