我正在使用具有自定义初始化功能的Android工作管理器。为此,我在清单中禁用自动初始化
<provider
tools:replace="android:authorities"
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.work_manager_init"
android:enabled="false"
android:exported="false" />
Run Code Online (Sandbox Code Playgroud)
在应用程序代码中,我使用此代码
private fun initWorkManager() {
WorkManager.initialize(this, Configuration.Builder().run {
setWorkerFactory(appComponent.daggerWorkerFactory())
build()
})
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,它工作正常。但是当我用roboletric测试时,任何需要上下文的类都RuntimeEnvironment.application将抛出此异常
java.lang.IllegalStateException: WorkManager is already initialized.
Did you try to initialize it manually without disabling
WorkManagerInitializer? See WorkManager#initialize(Context,
Configuration) or the class levelJavadoc for more information.
Run Code Online (Sandbox Code Playgroud)
该initWorkManager()GET调用,并抛出这个怎么一回事,因为它不知道自动init的清单已被禁用,并不知我的测试不能读取清单文件中的值。
任何帮助或建议将不胜感激。
我使用的下载管理器下载我的文件在Android和它的伟大,因为它处理一切(连接丢失,重试等)问题是我希望我的文件在队列中的一个又一个被下载并据我所知下载管理没有按不提供此功能.因此,对DownloadManager.enqueue(...)的多次调用会导致所有文件的并发下载.我怎样才能解决这个问题?
我不能只在我的活动中排队并逐个发送下载到DownloadManger,因为活动可能随时被销毁!
另外IntentService在这里不起作用!! 即使它逐个处理请求,调用DownloadManager.enqueue()将运行得如此之快,然后下一次调用,结果将再次并发下载!
我的第三个选择是使用获取请求的LocalService并在先前开始的下载完成时调用DownloadManager.enqueue()但我应该怎么做?我的服务需要从我的活动中得到请求,即使它正在运行!(所以我不能把数据放在意图中).为了实现通信,我需要使它成为一个绑定服务,并且当文档表明它没有任何绑定时它会破坏!
bound service runs only as long as another application component is bound to it.
Multiple components can bind to the service at once, but when all
of them unbind, the service is destroyed.
Run Code Online (Sandbox Code Playgroud)
因此,当我的活动关闭时,我会丢失队列中的下载.我对吗?
并且有最终选项在单独的过程中使用服务,因为即使我的第三个选项有效,只要应用程序未关闭,它就只下载文件.这个选项似乎是可怕的,因为我必须处理进程间通信,我不知道那是什么!
所以我错过了什么?!不应该是我的问题更容易解决?
我只是下载文件是队列!当无法下载时,我也不希望我的服务无限期运行.
android android-service android-download-manager android-service-binding
我正在使用WorkManager 1.0.0-alpha05我的应用程序可能运行或未运行的功能来安排某些任务.我要做的工作需要context如何将上下文传递给它?
class CompressWorker : Worker() {
override fun doWork(): Result {
//need context here
Log.e("alz", "work manager runs")
return Result.SUCCESS
}
}
Run Code Online (Sandbox Code Playgroud)
这是我如何初始化工作.
val oneTimeWork = OneTimeWorkRequestBuilder<CompressWorker>()
.setInitialDelay(15, TimeUnit.MINUTES)
.build()
WorkManager.getInstance().enqueue(oneTimeWork)
Run Code Online (Sandbox Code Playgroud) 我在android中有一个组合视图,其中包含几个textViews和一个EditText。我定义的属性我叫自定义视图text和getText,setText方法。现在,我想为自定义视图添加一种2方向数据绑定,将其绑定到内部编辑文本,因此,如果我的数据得到更新,则编辑文本也应同时更新(现在可以使用),并且当我的编辑文本得到更新时,数据也应更新。
我的绑定类看起来像这样
@InverseBindingMethods({
@InverseBindingMethod(type = ErrorInputLayout.class, attribute = "text"),
})
public class ErrorInputBinding {
@BindingAdapter(value = "text")
public static void setListener(ErrorInputLayout errorInputLayout, final InverseBindingListener textAttrChanged) {
if (textAttrChanged != null) {
errorInputLayout.getInputET().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
textAttrChanged.onChange();
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图用下面的代码绑定文本。userInfo …
data-binding android android-binding-adapter two-way-binding
我有 android 项目 A 和项目 B 都在 android studio 中配置。现在我想将整个项目 B 作为项目 A 的依赖项。然后在项目 A 中我想在项目 B 中启动一项活动,那么是否可能,更重要的是如何启动?!
项目 B 包含所有 android_manifest、graidle confings、proguard 规则等。
如果无法将项目添加为依赖项,那么在项目 A 中的单独位置添加项目 B 的内容(超过 200 个文件、绘图、尺寸等)的最小方法是什么,这样就不会弄乱我的项目!
我在浓缩咖啡中编写了一个测试用例,需要执行删除(退格)。我想出来的代码是这样的
onView(withId(R.id.testNumberEditText))
.perform(replaceText("123"))
.perform(pressKey(KeyEvent.KEYCODE_DEL))
.check { view, _ ->
assertEquals("12", (view as EditText).text.toString())
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用,文本仍然是123. 知道我应该按哪个键来获得所需的结果我做错了什么吗?
LiveData似乎非常有用,因为它只在视图处于活动状态时通知视图。它还在订阅后立即存储并返回最后一个值给新订阅者。
我的问题是如何仅使用 RxJava 实现相同的功能?
由于 Rx 是一个功能齐全的反应式解决方案,将它与另一个反应式解决方案结合起来似乎不太对。我更喜欢是否可以从项目中删除 LiveData。
我知道https://github.com/trello/RxLifecycle和https://github.com/uber/AutoDispose但他们所做的是取消订阅流。我不想要那个。只要视图模型还活着,我就希望我的流存在,但我的活动会根据生命周期开始和停止收听 Steam。
任何建议将不胜感激