2022年9月30日金曜日

しつこい「android.os.TransactionTooLargeException」

こんにちは。



結構前から掲題の例外「android.os.TransactionTooLargeException: data parcel size 754884 bytes」が発生していて、何度も対応していたのですが、未だに稀に発生していました。

非常に稀なので、優先順位を下げていたのですが、再度本腰をあげて調査しました。



今までも自分で再現できたことが無かったのですが、まずは再現させることから取り掛かりました。

これの例外は、画面の回転、画面がバックスタックに移動、ViewPagerでスクロールなどで、画面の状態を保持する際に、データサイズが上限を超えたときに起きるようです。

ただし、上限は1MBらしいですが、1MB以下でも例外が発生しています。

状態保持は、ActivityやFragmentの「onSaveInstanceState(Bundle)」で行い、「onCreate(Bundle)」などのBundleを使って復元します。


そこで、1MB以上保持するように計算して、テストデータ作成と画面操作(スクロール&バックスタック)をしますが、例外は発生しません。

ここで、Android StudioのProfilerでMemoryのCapture heap dumpを取ってみます。

一覧の「Fragment$SavedState」をみると「Retained Size」が確かに1MB超えています。



そこで、前述の操作はDebugモードで行っていたので、Releaseモードで全く同じ操作をしてみたところ、例外発生しました。

この例外は、Debugモードでは発生しないと推測しました。あくまで推測ですが。



そして修正を施して、Releaseモードでテストを行って、例外が発生しないことを確認しました。

修正した内容は、ViewPagerを使った画面でEditTextを複数配置していて、EditTextの状態保持は既存の処理に任せていたのを自前で行うことに変更しました。

EditTextのプロパティに「android:saveEnabled="false"」を追加して、既存の処理は止めました。



これで様子見です。


以上です。


2022年9月29日木曜日

実行中の通知が表示されない

こんにちは。


Android12の動作の変更点の見逃していた部分を書いておきます。


自分が作ったアプリをAndroid12で操作していると実行中の通知が表示されないのが気になっていました。

実行中の後の完了の通知は表示されるので、緊急性はないかと後回しにしていました。


しかし、新しいアプリをリリースするにあたって、再度、Android12の動作の変更点をじっくり読み返して、やっと気づきました。


フォアグラウンド サービス通知の UX の遅延」のせいでした。

「短時間実行されるフォアグラウンド サービスのエクスペリエンスを簡素化するため、Android 12 以降を実行するデバイスでは、特定のフォアグラウンド サービスについて、フォアグラウンド サービス通知の表示を 10 秒間遅らせることができます(少数の例外があります)。この変更により、通知が表示される前に存続時間の短いタスクを完了する機会が与えられます。」


10秒も遅らせると!!

実行を通知する必要がなく、ちょっとした処理であれば、いちいち通知しないのはよいでしょうが、自分のアプリの場合は実行しているのか分からないのは困ります。


すぐに通知を表示させる方法は簡単で、以下のコメントの次の行を追加するだけです。



よかったら、アプリの上に表示できるメモ

フローティングメモ - Google Play のアプリ

をよろしくお願いします。


以上です。






 

2022年9月26日月曜日

フローティングメモの紹介動画を作りました。

こんにちは。


初めて動画を作りました。フローティングメモの紹介動画です。




動画編集ソフトは、無料で使用できるパソコン版の「Clipchamp」です。

動画編集には抵抗があったのですが、思っていたよりは難しくはなかったです。

作成した動画をgoogle playのフローティングメモのページにも設定しました。


フローティングメモ - Google Play のアプリ



2022年9月12日月曜日

新アプリ「フローティングメモ」をリリースしました!

こんにちは。

ブログを書くのは久しぶりです。


タイトルの通り、新アプリ「フローティングメモ」をリリースしました。


メモとしては、シンプルなメモですが、他のアプリの上に浮いているように表示させることができるようにしました。


通常画面の上にフローティング画面を表示


ちょっとしたメモを見るだけで、実行中のアプリがバックグランドに行ってしまい、戻ると再表示に時間がかかるってしまうことがよくあります。


「フローティングメモ」は、実行中のアプリをバックグランドに行かせず、表示します。


それと、もっと簡単にメモを確認する方法として、通知に自由にメモを設定できるようにしました。


通知に設定しておけば、通知をベローンと引っ張り出すだけで、確認できます。


通知

通知には、お好きなアプリの起動ボタンも設置できます。


ヘルプは、以下です。

https://www.bnbnapp.com/2022/07/floatingmemo-help.html


google playは、以下です。

https://play.google.com/store/apps/details?id=com.bnbnapp.floatingmemo


どうぞ、よろしくお願いします。