小编Yam*_*ion的帖子

如果lifecycleScope 是supervisor,为什么它的子协程失败导致应用程序崩溃?

我是 Kotlin 协程的新手,并试图了解监督。正如文档所说:

子节点的失败或取消不会导致主管作业失败,也不会影响其其他子节点。


好的,我已经为 JVM 编写了以下代码:

@JvmStatic
fun main(args: Array<String>) = runBlocking {
    val supervisorScope = CoroutineScope(Dispatchers.Default + SupervisorJob())

    // Coroutine #1
    supervisorScope.launch {
        println("Coroutine #1 start")
        delay(100)
        throw RuntimeException("Coroutine #1 failure")
    }

    // Coroutine #2
    supervisorScope.launch {
        for (i in 0 until 5) {
            println("Coroutine #2: $i")
            delay(100)
        }
    }

    supervisorScope.coroutineContext[Job]!!.children.forEach { it.join() }
}
Run Code Online (Sandbox Code Playgroud)

这里一切都很好,Coroutine #1失败既不会影响父级,也不会影响Coroutine #2. 这就是监督的目的。输出与文档一致:

Coroutine #1 start
Coroutine #2: 0
Coroutine #2: 1
Exception in thread "DefaultDispatcher-worker-1" java.lang.RuntimeException: Coroutine …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-coroutines

7
推荐指数
2
解决办法
1774
查看次数

Dagger 2现场注入在Android中不起作用

问题是我尝试使用Dagger 2进行字段注入,但在运行时字段,应注入,始终是null.我也尝试使用MVVM模式.这是我的代码:

ProfileActivity.java:

@Override
protected void onStart() {
    super.onStart();
    Log.d(TAG, "ProfileActivity: onStart: ");

    final ProfileViewModel profileViewModel 
         = ViewModelProviders.of(this).get(ProfileViewModel.class);
    profileViewModel.init();
    profileViewModel.getUser().observe(this, new Observer<User>() {
        @Override
        public void onChanged(@Nullable User user) {
            if (user != null) {
                Log.d(TAG, "ProfileActivity: onStart: " + user.toString());
            } else {
                Log.d(TAG, "ProfileActivity: onStart: user == null");
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

ProfileViewModel.java:

public class ProfileViewModel extends ViewModel {
    private LiveData<User> user;

    @Inject
    UserRepository userRepository;

    public ProfileViewModel() {
        Log.d(TAG, "ProfileViewModel: Constructor: ");
    }

    public void init() …
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger-2

2
推荐指数
1
解决办法
545
查看次数