[Android] 開発者向けオプション「CPU使用状況を表示」を調べてみた

| トラックバック(0) |

load_average.png

Android 4.0 から標準の設定アプリに「CPU使用状況を表示」機能が追加されました。

この機能を有効にすると、画面右上に「現在のCPU使用状況」がオーバーレイ表示されます。

 

はっきり言って使われない機能だと思うのですが、以下の 2点 が気になったので調べてみました。

1. オーバーレイ表示される ○ / △ / □  の3つの数値の意味

2. オーバー例の方法

 ※最前面のオーバーレイ表示のレイヤーは、タッチしてもイベントを受け取らないようになっている

 

1. オーバーレイ表示される ○ / △ / □ の数値の意味

Linux における /proc/loadavg で表示される最初の3つの情報であり、

1つ目が「過去1分間」、2つ目が「過去5分間」、3つ目が「過去15分間」のCPU使用率となります。

 ※「adb shell cat /proc/loadave」でも表示可

 

2. オーバーレイの方法

com.android.systemui.LoadAverageService クラスに実装コードがありましたが、

通常のアプリでは、WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY を使用する権限がないため、

以下の実装を真似しても動作しませんでした。。。

package com.android.systemui;
// ・・・省略・・・
public class LoadAverageService extends Service {
    private View mView;
    // ・・・省略・・・
    private class LoadView extends View {
        @Override
        public void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            // ここでオーバーレイしたい情報を描画
        }
    }
    // ・・・省略・・・
    @Override
    public void onCreate() {
        super.onCreate();
        mView = new LoadView(this);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY, // <-
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            PixelFormat.TRANSLUCENT);
        params.gravity = Gravity.RIGHT | Gravity.TOP;
        params.setTitle("Load Average");
        WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
        wm.addView(mView, params);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        ((WindowManager)getSystemService(WINDOW_SERVICE)).removeView(mView);
        mView = null;
    }
    // ・・・省略・・・
}

 

ちなみに、TYPE_SECURE_SYSTEM_OVERLAY のコメントは、以下のとおりです。

 ※hide を無視して定数あわせても駄目です

/**
 * Window type: secure system overlay windows, which need to be displayed
 * on top of everything else.  These windows must not take input
 * focus, or they will interfere with the keyguard.
 *
 * This is exactly like {@link #TYPE_SYSTEM_OVERLAY} except that only the
 * system itself is allowed to create these overlays.  Applications cannot
 * obtain permission to create secure system overlays.
 * @hide
 */
public static final int TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15; 

 

公開 API として一般のアプリ権限で使用できれば、使い道もあると思うのですが^^;

トラックバック(0)

トラックバックURL: http://mt.adakoda.com/mt-tb.cgi/558

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31