java - 退出方法/进程而不调用 exit() 方法
问题描述
我正在编写一个 android 应用程序,我通过 JNI 使用 C 代码作为库。我将库作为一个单独的线程启动,如下所示。
public class LibraryHandler implements Runnable {
private static final String TAG = "LibraryHandler";
@Override
public void run() {
Log.w(TAG, "Starting library");
testJNILib.startlibrary();
Log.e(TAG, "Bounced out of library Handler loop. Exiting....");
}
}
当我的应用程序关闭并将其分配给null时,我通过中断它来停止线程。
但是,当线程在 coitnuuosly 运行时停止时,该方法不会库,并且仅在我使用“stoplibary()”调用手动终止它时才停止。但是当我调用 stoplibrary 调用时,它会调用 exit() 函数,因此会关闭整个应用程序。我只想停止图书馆而不是整个过程。我必须清理所有资源,所以我不能使用 return 而不是 exit()。有人请让我知道我可以遵循的任何方法来清理所有资源而不是退出。
如图所示,“startLibrary()”和“stoplibrary()”进入 JNI
extern "C" JNIEXPORT jint JNICALL Java_com_test_android_client_testJNILib_startlibrary(JNIEnv * je, jclass jc)
{
char *argv[] = {"libproxyd", "-o", "unix:/data/data/com.adaranet.android.droidproxyclient2/files/proxy_db.sock"};
int ret = start(3, argv);
return ret;
}
extern "C" JNIEXPORT jint JNICALL Java_com_test_android_client_testJNILib_stoplibrary(JNIEnv * je, jclass jc){
library_signal_handler(SIGTERM);
LOGE("CAlled library_signal_handler");
return 1;
}
library_signal_handler() 如下:
void
library_signal_handler (int signo)
{
int ret;
__android_log_print (ANDROID_LOG_ERROR, "LIBRARY_MAIN", "Got signal %d \n", signo);
switch (signo) {
case SIGTERM:
__android_log_print (ANDROID_LOG_INFO, "LIBRARY_MAIN", "signal received sigterm\n");
delete_all_alias_interface(alias_count);
exit_stage_left();
exit (0);
break;
}
请让我知道如何克服这一点。
解决方案
推荐阅读
- java - 如何在 Java 中声明任何类类型的变量或对象
- javascript - 如何将时间设置为始终:00:00:00?
- python-3.x - 是否可以将句子拆分为字符串列表并将同一行中的字符串列表大写?
- flutter - 为 Flutter 开发人员制作 UI 的最快方法?
- javascript - nodejs url.resolve 函数有什么替代品吗?
- javascript - 将 JS 翻译成数学(定义了多个变量)
- javascript - Discord.js 什么都不做
- pandas - 对 DataFrame 中的条目进行分组和计数
- unix - 如果 Unix 进程关闭,它会自行启动
- python - Python tkinter 无法画线