同期した同じ数値です。
グラフ形状や期間のとり方。
結構違うんだなあ。
左が、iOS 15.2。
右が、Android OS 12.0。




どちらにしても、
なんか見づらいような気がいたす。
あれか、iOSは、やっぱ、
「ヘルスケア」か。
👉 「Google Fit: アクティビティ トラッカー」をApp Storeで
👉 Google Fit: アクティビティ記録 - Google Play のアプリ
同期した同じ数値です。
グラフ形状や期間のとり方。
結構違うんだなあ。
左が、iOS 15.2。
右が、Android OS 12.0。




どちらにしても、
なんか見づらいような気がいたす。
あれか、iOSは、やっぱ、
「ヘルスケア」か。
👉 「Google Fit: アクティビティ トラッカー」をApp Storeで
👉 Google Fit: アクティビティ記録 - Google Play のアプリ
今、現在日本語での説明ページはありませんが登場しています。

👉 Inline adaptive banners | Android | Google Developers
バナーの幅を指定する。画面全幅に最適。
バナーの高さがこれまでのアダプティブバナーより大きくなる。最大値で制限も可能。
スクロールする画面にも配置できる。
300x250 サイズのバナーの代替を担うのでしょうか。
スクロールする縦長の文章画面などにいいと思われます。
変わるのは AdSize の取得部分のみ。
// Adaptive Banner
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, 320)
↓
// Inline Adaptive Banner
adSize = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(context, 320)
その他はすべて、これまでの Admob アダプティブバナー実装と同じ。

👉 顔文字/絵文字辞書 単語リスト - Google Play のアプリ
最近、SDK APIの仕様設計とか説明とか雑になってないか。
Vector Drawableの各パスの色は、XML形式の一部として
android:fillColor="..."
という形式で定義されています。
これは、
android:fillColor="@color/colorPrimary"
などのカラーリソース や、
android:fillColor="?attr/colorControlNormal"
などのテーマ属性 に対応しています。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
</vector>
colorControlNormal 属性は Day/Night テーマのデフォルトです。
👉 Combining Vector Drawables with Day/Night Theme | by Tim Mutton | Medium
以下のように、Day/Night テーマ変更時にアイコンの色を変化させるには、

Vector Drawable 内
<path
android:fillColor="?attr/colorControlNormal"
...
とするとよい。
なかなか理屈ではくっきり区別しづらくなってきたような気がしています。
kotlin や swift でいうところの
Rx の Hot。
検索キーワードとして
ざっくりと2つに分ける。
ConflatedBroatcastChannel (Kotlin - Channel)
↓
StateFlow (Kotlin - Flow)
BehaviorSubject (RxSwift/RxJava)
↓
BehaviorRelay (RxRelay/RxCoCoa)
↓
Driver (RxCocoa)
BroadcastChannel (Kotlin - Channel)
↓
SharedFlow (Kotlin - Flow)
PublishSubject (RxSwift/RxJava)
↓
PublishRelay (RxRelay/RxCoCoa)
↓
Signal (RxCocoa)
最近では日本語だけの検索では情報が足りません。
iOS ↔ Android 間の意味合いを考えながら、
まずは、
扱うのが State か Event か、を区別すると理解しやすいと思います。
👉 com.jakewharton.rxrelay2 (RxRelay 2.0.0 API)
👉 ReactiveX/RxSwift: Reactive Programming in Swift
👉 【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた
👉 RxSwiftのSubjectとRelayについて理解する - Qiita
👉 関数型プログラマのための Rx 入門(前編) - Okapies' Archive
👉 RxSwift/RxRelay at main · ReactiveX/RxSwift
👉 RxSwift(RxCocoa) における Subject・Relay を理解する - iOSエンジニアのつぶやき
👉 「Rx」の検索結果 - Qiita
「不要」というより「自動」なので超便利。
ここでは、addObserver()の呼び出しはありますが、onDestroyのremoveObserver()の呼び出しはありません。これは意図的なものでしょうか?

👉 BoundLocationManager.java at googlecodelabs
ライフサイクルを考慮した新しいコンポーネントの良い点は、Observer の解除や削除が不要なことです。
👉 Lifecycle Observer is not removed in step_4 · Issue #5 · googlecodelabs/android-lifecycles
// no need to unsubscribe/remove observers
lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) {
container.removeAllViews()
}
})
拡張関数などでも便利に使えそうです。