我想在应用退出时保存一些数据,但在Chromebook上,有一个系统关闭按钮,当用户通过这个关闭按钮退出应用时,应用的onPause和onStop不会被调用。如何收听此关闭按钮事件?
62o28rlo1#
在Chromebook上,系统关闭按钮向应用发送终止信号,这不会触发onPause()或onStop()生命周期方法。可靠地检测此事件的唯一方法是通过注册信号处理程序手动处理信号。在应用的主Activity中,您可以注册一个信号处理程序,以检测终止信号,并在应用关闭前保存您想要保存的数据。下面是一个示例代码片段:
private static final int TERMINATE_SIGNAL = 15; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Register signal handler SignalHandler signalHandler = new SignalHandler(); Signal.signal(TERMINATE_SIGNAL, signalHandler); } private class SignalHandler implements SignalHandler { @Override public void handle(Signal sig) { // Save data // ... // Exit app finish(); System.exit(0); } }
使用此代码,当终止信号发送到应用时,将调用SignalHandler的handle()方法,允许您在调用finish()关闭应用之前保存想要保存的数据。
bsxbgnwa2#
Signal.signal()和SignalHandler是Java Native Interface(JNI)库的一部分。要在Android项目中使用它们,您需要在build.gradle文件中添加以下依赖项:
Signal.signal()
SignalHandler
build.gradle
dependencies { implementation 'androidx.core:core:1.6.0' }
然后,您可以在代码中使用Signal.signal()和SignalHandler。下面是一个例子:
import android.os.Handler; import android.os.Message; import android.os.Signal; import android.os.SystemClock; public class SignalExample { private static final int SIGNAL_INT = Signal.SIGINT.ordinal(); private static final int SIGNAL_TERM = Signal.SIGTERM.ordinal(); public static void main(String[] args) { Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { System.out.println("Received signal: " + msg.what); return true; } }); SignalHandler sigIntHandler = new SignalHandler(handler, SIGNAL_INT); SignalHandler sigTermHandler = new SignalHandler(handler, SIGNAL_TERM); Signal.handle(new Signal("INT"), sigIntHandler); Signal.handle(new Signal("TERM"), sigTermHandler); while (true) { System.out.println("Running..."); SystemClock.sleep(1000); } } private static class SignalHandler implements SignalHandler { private final Handler mHandler; private final int mSignal; public SignalHandler(Handler handler, int signal) { mHandler = handler; mSignal = signal; } @Override public void handle(Signal signal) { System.out.println("Handling signal: " + signal.getName()); Message msg = mHandler.obtainMessage(mSignal); mHandler.sendMessage(msg); } } }
此示例显示如何使用SignalHandler类处理SIGINT和SIGTERM信号。Handler用于接收信号并将消息打印到控制台。
SIGINT
SIGTERM
Handler
2条答案
按热度按时间62o28rlo1#
在Chromebook上,系统关闭按钮向应用发送终止信号,这不会触发onPause()或onStop()生命周期方法。可靠地检测此事件的唯一方法是通过注册信号处理程序手动处理信号。
在应用的主Activity中,您可以注册一个信号处理程序,以检测终止信号,并在应用关闭前保存您想要保存的数据。下面是一个示例代码片段:
使用此代码,当终止信号发送到应用时,将调用SignalHandler的handle()方法,允许您在调用finish()关闭应用之前保存想要保存的数据。
bsxbgnwa2#
Signal.signal()
和SignalHandler
是Java Native Interface(JNI)库的一部分。要在Android项目中使用它们,您需要在build.gradle
文件中添加以下依赖项:然后,您可以在代码中使用
Signal.signal()
和SignalHandler
。下面是一个例子:此示例显示如何使用
SignalHandler
类处理SIGINT
和SIGTERM
信号。Handler
用于接收信号并将消息打印到控制台。