0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android/View関連のクラスの挙動を確認する手法例

Last updated at Posted at 2022-10-17

今回は、Android/TextClockが、
アプリがバックグランドになった際に停止されているかを検証します。

ソースコードの確認

[TextClock]
https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextClock.java

TextClockのソースコードになります。
Androidフレームワークでは、
オープンソースとして公開されているため、
TextClock自体を解析します。

「TextClock#onVisibilityAggregated」で、
「Runnable mTicker」の停止/再開をしているようです。

API仕様の確認

次は、「TextClock#onVisibilityAggregated」を調べます。
https://developer.android.com/reference/android/widget/TextClock#onVisibilityAggregated(boolean)

boolean: このビューとそのすべての祖先が表示され 、このビューのウィンドウも表示される場合は trueView.VISIBLE

英文も和訳も意味不明ですが、
「onVisibility」の語感から表示されたらtrueで、非表示でfalseになるように見えます。

裏付け確認用のコード作成

onVisibilityAggregatedの挙動を確認するため、
TextClockを継承した、TextClock2クラスを作成します。
[Java]

package jp.textclock;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextClock;

public class TextClock2 extends TextClock {
    // Viewクラスのコンストラクタは3つでワンセット(たぶん)
    public TextClock2(Context context) {
        super(context);
    }

    public TextClock2(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TextClock2(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onVisibilityAggregated(boolean isVisible) {
        Log.d("onVisibilityAggregated", "isVisible>" + isVisible);
        super.onVisibilityAggregated(isVisible);
    }
}

「onVisibilityAggregated」動作でLogcat出力をするようにします。

以下は、実行時のLogcatです。

2022-10-17 22:47:46.059 onVisibilityAggregated isVisible>true
2022-10-17 22:47:50.340 onVisibilityAggregated isVisible>false
2022-10-17 22:47:52.990 onVisibilityAggregated isVisible>true

[アプリ起動時]
Logcatの1行目に「isVisible>true」が出力されています。

[アプリがバックグラウンドに移行]
Logcatの2行目に「isVisible>false」が出力されています。

[アプリがフォアグラウンドに移行]
Logcatの3行目に「isVisible>true」が出力されています。

super.onVisibilityAggregated(isVisible);

で、「TextClock#onVisibilityAggregated」が実行されるため、

  • バックグラウンドで、「Runnable mTicker」の停止
  • フォアグラウンドで、「Runnable mTicker」の再開
    が行われていることになります。

まとめ

調べごとがあれば、Google検索するのが一般的だと思われますが、
ニッチな内容には対応できな場合もあります。
その際に自力で調査する方法として、
一例を紹介させて頂きました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?