kotlinで別スレッドによる遅延処理を行います。
10秒待った後に、testActivityからTest2Activityに遷移する方法を何通りか洗い出していきます。
Handler
初めにHandlerを使う方法です。UIスレッドで実行が必要な場合は、Handlerを使う方法が簡単です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import android.os.Handler class testActivity: AppCompatActivity() { private val mHandler = Handler() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_history) Handler().postDelayed(Runnable { val intent = Intent(this, Test2Activity::class.java) startActivity(intent) }, 10000) } } |
コルーチン
次にコルーチンを使う方法です。導入方法からです。
【app/build.gradle】
1 2 3 |
dependencies { compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.21.2' } |
【project/build.gradle】
1 2 3 |
buildscript { ext.kotlin_version = '1.2.10' } |
Sync nowを押せば導入完了です。
launch {}の中の処理は別スレッドになります。Intent処理はUIスレッドで実施する必要があるので、外に関数で出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import android.content.Intent import kotlinx.coroutines.experimental.delay import kotlinx.coroutines.experimental.launch class TestActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_menu) launch { var job = launch { delay(10000) } job.join() // 上記処理が終わるまで待つ taskA() } } fun taskA(){ val intent = Intent(this, Test2Activity::class.java) startActivity(intent) } } |