Translate

BTemplates.com

Powered by Blogger.

2017年11月7日火曜日

2017-11-07 到達点メモ


忘れやすいのでメモ
gimpでオブジェクトの整列を行いたい場合は
赤枠で囲んだ部分をクリックし


基準をアクティブなレイヤーに変更し



レイヤーで基準にしたいレイヤーを選択した後に、
並び替えたい整列ボタンをクリックする


googleConsoleの方を見たら、クラッシュの報告が来ているのを確認したので
テストをしてみたのですが、どうも再現できない。
一応、エラー文をそのまま検索をかけたところそれっぽいのは見つかったのですが……
参考サイト:Kotlin crashes on Android when selected item view is null
によると、AdapterView.OnItemSelectedListenerの中で宣言したonItemSelected()
の引数が、nullを取得する時があるらしい。
……まじかよ。
参考サイト:43.2.15 その他の例外のjava.lang.IllegalArgumentExceptionの項目部分
多分、上記の参考サイトと合わせて考えるに
nullが入っていることは案外ありそうだなと思った。

で、そういう訳で自動テストの方を試してみたいと思って
メモをしていなかったので忘れていたのだが
FirebaseにTestLabがあるので、それを使えばよい。

また、色々あってFirebaseがきちんと組み込んでいなかったので
組み込もうとしたら以下のようなエラーが出た

Error:Execution failed for task ':app:processDebugGoogleServices'.
> Please fix the version conflict either by updating the version of the google-services plugin (information about the latest version is available at https://bintray.com/android/android-tools/com.google.gms.google-services/) or updating the version of com.google.android.gms to 9.0.0.

困ったので検索したところ
以下のページを見つけた。
参考サイト:AndroidでGoogle Play 開発者サービス 8.4.0を導入したらversion conflictが起きた


どうも  apply plugin: 'com.google.gms.google-services'は
   compile 'com.google.android.gms:play-services-ads:11.0.4'を呼び出した後に
書かないとエラーが出るようである。


そして、どうしても減少が再現できないので変な動作をしていたら
新たなバグを発見してしまった……。
具体的にいうとバックキーを押すと、アプリが終了するのだが
その際にタイマーが働いていると、前のタイマーの時間が保持された状態なので
新しくタイマーを動かすと、前のタイマーと新しいタイマーが
同時に動き、表示がおかしくなります。
バックキーで終了的な事は基本は自分はしないのですが
他の人がこのような動作をする可能性はあり得るので、直します。

で、色々調べた結果、まずバックキーを検知する方法は

    override fun onBackPressed() {

    }
で、行うことができました。

一方で、原因は完全にわかり切っているわけではないのですが
    override fun onBackPressed() {
        super.onBackPressed()
        Log.d(TAG,"Pressed_BackKey")
        moveTaskToBack(true)
    }
にすると、super.onBackPressed()以降の文が全部無視されるので書かないようにしましょう。
どうも、参考サイトによると、super.onBackPressed()でデフォルトの動作を行っているようで、それがアクティビティを終了させる動作だから、そこで処理が止まってしまって以下の動作が無視されたのかもしません。

参考サイト:Android Overriding onBackPressed()


同時並行で終了させる方法も調べていたのですが、
finishAndRemoveTask()でバックタスクを残さずに
終了させることができるのですが
この場合、どうも全部の内容を削除しているわけではないようで
具体的には、バックキーを押したときと同様の現象が発生します。

参考サイト:Activity#finish() でアプリが終了できないときは
参考サイト:公式ドキュメント-オーバービュー画面-AppTask クラスを使用してタスクを削除す
参考サイト:公式ドキュメント-タスクとバックスタック


応急処置的な手法であれなのですが、
バックキーを押したときに、バックタスクにするという風な仕様にすることにしました。
と言っても最初はバックキーを押したときにバックタスクに残っていたこともあり、こっちの方がある意味操作感が変わらなくていいかもしれない。

具体的には以下のように書きます。
    override fun onBackPressed() {
        moveTaskToBack(true)
    }

参考サイト:Android で System.exit() を使ってはいけない理由と、終了方法のまとめ

ザっと動作確認をした限りでは、大丈夫そうなので
明日また確認したらアプリを上げる予定です。

今日はここまで。


0 コメント:

コメントを投稿