0
0

More than 3 years have passed since last update.

Androidでしてはいけない再帰をする

Posted at

ふと思った
onCreate()みたいなところで自分をまた呼び出すようにしたらどうなるだろう?」
結果はわかりきっているがやってみた

実際にやってみた

onCreate()と言っておいてonResume()に書いていますが気にしない気にしない

LaboratoryActivity.kt
class LaboratoryActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_laboratory)
    }

    override fun onResume() {
        super.onResume()
        Log.d("korehataihennnamisuwokennsyousurutamenomonodesu,Androidkunn...taete!", "onResume")

        startActivity(Intent(this, LaboratoryActivity::class.java))
    }
}

結果

MainActivityにおいてあるボタンからLaboratoryActivityに行くと...

LaboratoryActivityの画面は描画されませんが、しっかりと仕込んでおいたログが何回も出ています
少しすると画面が描画されました(なにか限界を迎えた感じがした)
もちろん、UIのボタンは反応しません

だんだん再帰の速さが遅くなってきたので、止めました

まとめ

やる前からわかっていましたが、やっぱりフリーズしました

おまけ 「何もできない!」

やっても意味ないし、やってはいけないのですが、やるときは気をつけましょう
さっき だんだん再帰の速さが遅くなってきたので、止めました なんて言いました
でも、実際はそんなあっさり止まりません、というか本当に止まりません

画面は何も反応しません タスク一覧は出ません ホーム画面にいけません
「ん〜 詰んだ?」いいえ諦めません
なぜかというと

$ adb shell

は全然反応します
そこでam force-stop xxxxxだったりam kill xxxxxだったりしましたが、だめでした
画面は凍ったままです
なんとか通知とかを出すくらいはできたので、電源メニューを出して再起動をしましたが、再起動しませんでした
じゃあどうしよう...

結果的には

$ adb reboot

で大丈夫でした
普通に再起動しました

ちょっと焦った

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0