Я использую recyclerView
для показа изображений / видео с sdCard, как приложение для галереи, и недавно я перешел на Kotlin и попытался использовать сопрограммы для фоновой работы.
Несмотря на то, что при запуске сопрограммы возникают случайные сбои, я не могу понять трассировку стека, показанную в Firebase Crashlytics, она показывает номер класса и строки, где происходит сбой, но не причину этого ..
Ниже приводится мой refresh()
метод, при котором происходит сбой.
private fun refreshGallery() {
gridView.adapter = null
if (actionMode != null) actionMode!!.finish()
myAdapter = Adapter(galleryType!!, this@BaseFragment) //This is where I am getting a crash on some devices...
ref.isRefreshing = true
launch {
delay(1000)
val statusList = getMediaFiles()
myAdapter!!.addAll(statusList)
myAdapter!!.setEmptyView(empty)
gridView.adapter = myAdapter
myAdapter!!.toogleEmptyView()
if (ref.isRefreshing) ref.isRefreshing = false
}
}
Этот метод вызывается в onCreateView()
& swipeRefresh.setOnRefreshListener{}
Еще немного информации, я расширил CoroutineScope
во Фрагменте, поэтому нет Global.launch{}
Я также пытался использовать модификатор suspend
для функции, меняя withContext()
на async{}.await
, но он все равно вылетает.
Вот бревна от Crashlytics -
Caused by e.b
at com.example.fragments.BaseFragment.refreshGallery + 352(BaseFragment.java:352)
at com.example.fragments.BaseFragment.onCreateView + 233(BaseFragment.java:233)
at androidx.fragment.app.Fragment.onCreateAnimator(Fragment.java:5)
at androidx.fragment.app.Fragment.performCreateView + 2595(Fragment.java:2595)
at androidx.fragment.app.FragmentManagerImpl.moveToState + 880(FragmentManagerImpl.java:880)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState + 1237(FragmentManagerImpl.java:1237)
at androidx.fragment.app.FragmentManagerImpl.moveToState + 1302(FragmentManagerImpl.java:1302)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange + 2655(FragmentManagerImpl.java:2655)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated + 2609(FragmentManagerImpl.java:2609)
at androidx.fragment.app.FragmentController.dispatchActivityCreated + 246(FragmentController.java:246)
at androidx.fragment.app.FragmentActivity.onStart + 542(FragmentActivity.java:542)
at androidx.appcompat.app.AppCompatActivity.onStart + 201(AppCompatActivity.java:201)
at com.example.MainActivity.onStart + 189(MainActivity.java:189)
at android.app.Instrumentation.callActivityOnStart + 1249(Instrumentation.java:1249)
at android.app.Activity.performStart + 6873(Activity.java:6873)
at android.app.ActivityThread.performLaunchActivity + 2687(ActivityThread.java:2687)
at android.app.ActivityThread.handleLaunchActivity + 2785(ActivityThread.java:2785)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage + 1532(ActivityThread.java:1532)
at android.os.Handler.dispatchMessage + 102(Handler.java:102)
at android.os.Looper.loop + 163(Looper.java:163)
at android.app.ActivityThread.main + 6342(ActivityThread.java:6342)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run + 880(ZygoteInit.java:880)
at com.android.internal.os.ZygoteInit.main + 770(ZygoteInit.java:770)
MainActivity's onStart()
-
override fun onStart() {
super.onStart()
try {
NotificationManagerCompat.from(this@MainActivity).cancelAll()
} catch (ignore: Exception) {}
}