2021年3月20日土曜日

Android PieでImageViewやbackgroundに設定した画像の色が変わる

 Android PieでImageViewやbackgroundに設定した画像の色が変わる現象に遭遇した。
(静的に色が変わったり、短い期間に動的に繰り返し変わってチカチカ点滅するような感じになる)

今のところAndroid Pie ( Android 9 )のSO-05KとEssential Phone PH-1で発生。またユーザーさんのレビューとしても上記チカチカが挙がっていて、そちらのOSもAndroid Pie。

モバイルSuicaやウェザーニュースのアプリでも明らかに開発側が意図していないだろう変色が起きていることから、広く発生している問題なのだろうと思う。

というわけで自分のアプリで少し現象を追ってみると大変不思議な挙動で、まず初回インストールでは発生しない。アップデートインストールで発生する。

発生した場合色が変わるタイミングが不明(起動直後に変わったり変わらなかったり)
状況的にはAdmobの特定のバナー広告を読み込むと発生しているように見える。(広告をロードしない場合は発生しなかったが、たまたま顕在化しなかっただけかもしれないので確定的ではない)
Admobのバージョンを18.6.0まで以降19.8.0までいくつかのバージョンで試したが、いずれもNG。

回避方法としてはハードウェアアクセセラレーションをオフにするとこの現象は発生しなくなる。
android:hardwareAccelerated="false"
でもこれだとパフォーマンスが下がってアニメーションがカクカクになってしまうので、
backgroundをvector drawableにする( vector drawableなら発生しない )などしてなるべく影響範囲を抑えたうえ、
どうしてもラスター画像が必要なところに対してだけ
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P) {
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null );
}
としてハードウェアアクセラレーションを無効にするとよい。

おそらく何らかの条件が重なった時にだけ起こる問題のようで、StackOverflowでも全然見つからない。
こんなので困ってる人はそうそういないと思うけど、もしいたら参考にしてください。

2021年1月2日土曜日

Macで音が変な時(音飛び、プチプチ音、クリック音がする)はiOSシミュレーターが原因かも

Macで再生音がおかしくなる問題が発生して困った。
音飛びというよりはプチプチ音が断続的に入るイメージ。
非常に耳障りが悪い。

直接的な原因としてはバッファアンダーランな感じ。
(断続的にサンプル値が0になるとこういう音になる)

YoutubeでもZoomでも発生。
スピーカーでもイヤホンでも同じ。

で原因を探していると以下を見つけた
 https://developer.apple.com/forums/thread/132423

端的に言えばiOSシミュレーターを起動していると発生するよ、というもの。
確かにiOSシミュレーターを落としたら直った。

CatalinaでもBig Surでも発生する模様。

XCode12から発生し始めたらしい。直してほしいなあ。