1 回答

TA貢獻1820條經驗 獲得超9個贊
您是正確的,單擊 Android Studio 中的停止按鈕只會終止您的應用程序進程,而不調用任何生命周期方法。如果您的應用程序崩潰或 Android 由于內存壓力需要終止您的應用程序,情況也是如此,因此這也可能在運行時發生。每次可能發生這種情況時,您都無法添加任何鉤子來進行預測。
一種選擇是將您的電機驅動程序邏輯移動到一個單獨的應用程序模塊中,并通過綁定服務來控制它。這樣,當主應用程序終止時(在開發過程中或由于崩潰),驅動程序應用程序可以適當地管理它。以這種方式將您的驅動程序代碼與您的主應用程序分開通常也是一個很好的關注點分離。
下面是一個示例:
驅動程序.apk
class MotorDriverService : Service() {
override fun onCreate() {
super.onCreate()
startMotor()
}
override fun onDestroy() {
super.onDestroy()
stopMotor()
}
}
主文件
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val intent = ...
bindService(intent, connection, Context.BIND_AUTO_CREATE)
}
override fun onDestroy() {
super.onDestroy()
unbindService(connection)
}
private val connection = object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, service: IBinder) { }
override fun onServiceDisconnected(name: ComponentName) { }
}
}
這樣做更好的原因是因為綁定的服務連接是自動管理的。Android 在 Activity 想要綁定到它時創建服務,并在沒有更多客戶端綁定時銷毀它(在這種情況下也會發生在 main.apk 終止或崩潰時)。
驅動程序和主程序必須是兩個獨立的應用程序(不是同一 APK 中的活動/服務),因為這僅在兩者在完全獨立的進程中運行時才有效。
添加回答
舉報