We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在WorkManager in Android 2——高级用法中有两个问题没有得到解决
接下来是展现技术的时候了
好在本身框架提供了RxJava的插件
依赖需要填写
implementation "androidx.work:work-rxjava3:$work_version"
public class TokenUpdateWork extends RxWorker{ /** * @param appContext The application {@link Context} * @param workerParams Parameters to setup the internal state of this worker */ public TokenUpdateWork(@NonNull Context appContext, @NonNull WorkerParameters workerParams) { super(appContext, workerParams); } @NonNull @Override public Single<Result> createWork() { OAuthProvider provider return adapter.getDeviceToken() .map(tokenMap -> { provider.updateToken( tokenMap.get(Config.ACCESS_TOKEN) ); Logger.i("Get Token ok :) result:%s", provider.getToken()); return Result.success(); }) .onErrorReturn( throwable -> { Logger.e("TokenUpdateWork error",throwable); return Result.failure(); } ); } }
只要实现Single createWork()就行。
参考链接
接下来要解决最后一个问题了,依赖怎么拿?
看了一下Hilt的官方文档,似乎Work不在Component范围内
问了ChatGPT,提出要用HiltWorker。 一下子看到了希望。 不过这个HiltWorker有点令人失望
从StackOverflow来看 Injecting CoroutineWorker using Hilt
收益也不高,Only dependencies available in the SingletonComponent can be injected into the Worker.只有全局对象能注入。
好在Hilt有个@entrypoint是专门给那些未支持Hilt注入的类而准备的! 当然这种方式主要是用来全局单例注入
首先签入一个接口注入到SingletonComponent,需要用@entrypoint注解
public class TokenUpdateWork extends RxWorker{ //其他代码.. @EntryPoint @InstallIn(SingletonComponent.class) public interface OAuthInterface { IOauthApiAdapter getAdapter(); OAuthProvider getProvider(); } }
2.调用部分
@NonNull @Override public Single<Result> createWork() { OAuthInterface oAuthInterface = EntryPoints.get( this.getApplicationContext(), OAuthInterface.class ); OAuthProvider provider = oAuthInterface.getProvider(); //其他代码.. }
只要使用EntryPoints.get就行了,非常方便,HiltWorker可以果断抛弃了
Entry Point
终于在项目中正式使用了,至少周期性任务和解耦的方式还是不错
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
在WorkManager in Android 2——高级用法中有两个问题没有得到解决
接下来是展现技术的时候了
RxWork
好在本身框架提供了RxJava的插件
依赖需要填写
implementation "androidx.work:work-rxjava3:$work_version"
只要实现Single createWork()就行。
参考链接
接下来要解决最后一个问题了,依赖怎么拿?
看上去很美好的HiltWorker
看了一下Hilt的官方文档,似乎Work不在Component范围内
问了ChatGPT,提出要用HiltWorker。
一下子看到了希望。
不过这个HiltWorker有点令人失望
从StackOverflow来看
Injecting CoroutineWorker using Hilt
收益也不高,Only dependencies available in the SingletonComponent can be injected into the Worker.只有全局对象能注入。
使用entry point
好在Hilt有个@entrypoint是专门给那些未支持Hilt注入的类而准备的!
当然这种方式主要是用来全局单例注入
首先签入一个接口注入到SingletonComponent,需要用@entrypoint注解
2.调用部分
只要使用EntryPoints.get就行了,非常方便,HiltWorker可以果断抛弃了
参考链接
Entry Point
总结
终于在项目中正式使用了,至少周期性任务和解耦的方式还是不错
The text was updated successfully, but these errors were encountered: