我只是从Kotlin协程开始。我正在尝试使用协程轮询服务器,并希望在Activity或Fragment暂停时停止轮询,并相应地恢复轮询。因此,我pollScope的生命周期比所提供的生命周期短ViewModel.viewModelScope。我对目前的实施方式不完全满意,有几个问题:
pollScope?我也希望它在取消时viewModelScope也取消,这就是为什么我要指定父级作业。onResume()如果我取消pollJobs使用,为什么协程不能开始coroutineContext.cancel()?如果我保留一份工作清单并取消它们,它们会很好地启动。 import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.spruce.messenger.utils.FullLifecycleObserverAdapter
import kotlinx.coroutines.*
import java.io.IOException
import java.util.concurrent.CopyOnWriteArrayList
import kotlin.coroutines.CoroutineContext
suspend fun poll(initialDelay: Long = 5000,
maxDelay: Long = 30000,
factor: Double = 2.0,
block: suspend () -> Unit) {
var currentDelay = initialDelay
while (true) {
try {
try {
block()
currentDelay = initialDelay
} catch (e: IOException) {
currentDelay …Run Code Online (Sandbox Code Playgroud) 今天,我更新了最新版本的Stable Android Studio 3.5,在此版本中,布局编辑器具有某些奇怪的行为。
当我尝试使用Android Studio快捷方式重新设置代码格式,Ctrl+Alt+L但又重新格式化了不包含代码的整个组件时,我也尝试使用“代码”->“重新格式化代码”。但面临同样的问题。
重新排列代码之前的XML布局,
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/quick_start_title_text_top_margin"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/quick_start"
android:textColor="@color/colorBlack"
android:textSize="@dimen/quick_start_title_text"
app:fontPath="@string/font_semi_bold" />
<android.support.v7.widget.AppCompatImageView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:src="@drawable/bg_quick_start_line" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
XML重新排列代码后,
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/quick_start_title_text_top_margin"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.v7.widget.AppCompatImageView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:src="@drawable/bg_quick_start_line" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/quick_start"
android:textColor="@color/colorBlack"
android:textSize="@dimen/quick_start_title_text"
app:fontPath="@string/font_semi_bold" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
它会重新排列所有组件,而不是重新排列组件中的Code(如属性)。
因此,请帮助我解决问题,或者有人可以在Android Studio中提供一些设置来解决此问题。
I build my app and I put a breakpoint in didRegisterForRemoteNotificationsWithDeviceToken but it's not triggered.
It works fine on other versions of iOS.
Is this a bug in iOS 13 or did I miss something new in iOS 13?
I use Xcode Beta 6 and iOS 13 beta 8.