有没有办法检测应用程序何时最小化?简单地使用WidgetsBindingObserver该paused事件是行不通的,因为它与用户关闭屏幕/手机锁时无法区分。请注意,我需要它同时适用于 android 和 ios。
我正在做的事情的一些背景。在应用程序中,我正在运行一个计时器。如果用户最小化应用程序(例如将其手机用于其他用途),我想停止此计时器。但是,如果用户关闭屏幕/锁定屏幕,我希望计时器继续。
我正在尝试按照 android 蓝图指南将 MVP 模式实施到我的项目中。目前,我在 Presenter 中保存用户(实体数据),我真的不喜欢它,因为在每次配置更改时,Presenter 都会从数据库中获取用户。
我的第一个问题是:
我也知道 android 架构组件,尤其是 ViewModel,但是,我想保留 MVP 模式而不是 MVVM。
我的第二个问题是:
我已经被这个问题困住了很长一段时间,很想最终解决它。
干杯
在构建应用程序时,我得到以下信息:
[deprecation] mCallbacks in RoomDatabase has been deprecated
Run Code Online (Sandbox Code Playgroud)
不知道如何解决它。这里是依赖项:
implementation "androidx.room:room-runtime:2.1.0-alpha04"
implementation 'androidx.room:room-rxjava2:2.1.0-alpha04'
annotationProcessor "androidx.room:room-compiler:2.1.0-alpha04"
Run Code Online (Sandbox Code Playgroud)
是因为我正在运行Alpha版本吗?
我有一个堆栈,其中包含一个GestureDetector(这是最上面的层,跨越整个屏幕)和另一个小部件(在它下面),最终有一个ListView. 问题是全局GestureDetector使用onHorizontalDrag消耗了触摸事件。相反,我希望 ListView 仅使用该事件。
简而言之,有没有办法让 theListView优先于 theGestureDetector而不保持某种状态?请注意,ListView不是 的子项/子子项GestureDetector- 它们位于小部件树中的不同分支上。
我有一个开始启动协程的broadcastReceiver,我正在尝试对该单元进行测试...
广播:
class AlarmBroadcastReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Timber.d("Starting alarm from broadcast receiver")
//inject(context) Don't worry about this, it's mocked out
GlobalScope.launch {
val alarm = getAlarm(intent)
startTriggerActivity(alarm, context)
}
}
private suspend fun getAlarm(intent: Intent?): Alarm {
val alarmId = intent?.getIntExtra(AndroidAlarmService.ALARM_ID_KEY, -1)
if (alarmId == null || alarmId < 0) {
throw RuntimeException("Cannot start an alarm with an invalid ID.")
}
return withContext(Dispatchers.IO) {
alarmRepository.getAlarmById(alarmId)
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试:
@Test
fun onReceive_ValidAlarm_StartsTriggerActivity() {
val alarm …Run Code Online (Sandbox Code Playgroud)