質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

Google Mapの実装で大量に検出されるLogについて

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 87

score 48

前提・実現したいこと

Android studio 4.2.2でgoogle Mapを取り入れた実装をしています.
私が実装したい機能として,ユーザの向きを取得する度に,マップ UI上で向きが分かるよう反映させたいです.
しかし,向きを取得する毎にsetOrientation()を呼ぶため,膨大な数の

I/Counters: exceeded sample count in FrameTime


が呼ばれます. いずれ,処理が重いと判断され,アプリが落ちることはあるでしょうか.

向きは,onSensorChanged(SensorEvent event) で内の処理で取得しています.

以下のLogは,地図の状態が変わる度に呼ばれるのですが,何故こんなに呼ばれるのでしょうか.
そもそもFrameTime以内に,カメラ位置・拡大縮小・markerの変更による描画を終えることは可能なのでしょうか.
私の原因は,FrameTimeでのsample数を越えたことが原因です.

一様このLogは無視して構わないという情報を見たのですが,スレッドの表示限界に達することでアプリが落ちる様な気がするので,
できれば検出されないようにしたいです.

大量にはかれるLog

以下のように,zoomIn/Out, カメラ位置を動かす,Markerの状態が変わるなどをすると,大量に検出します.

I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/chatty: uid=10116(u0_a116) androidmapsapi- identical 21 lines
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/chatty: uid=10116(u0_a116) androidmapsapi- identical 59 lines
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/chatty: uid=10116(u0_a116) androidmapsapi- identical 4 lines
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/chatty: uid=10116(u0_a116) androidmapsapi- identical 64 lines
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/chatty: uid=10116(u0_a116) androidmapsapi- identical 2 lines
I/Counters: exceeded sample count in FrameTime
I/Counters: exceeded sample count in FrameTime
I/chatty: uid=10116(u0_a116) androidmapsapi- identical 32 lines
I/Counters: exceeded sample count in FrameTime

該当のソースコード

Mapに関わるコードを載せています.

     // onMapReadyが呼ばれたとき,1度だけ実行
    public void onMapStart() {
        // marker my location in map
        //setPinOnMap(myUserInfo);
        onLocationChanged(myUserInfo);
        // marker group area in map
        createCircle();
        mMap.getUiSettings().setScrollGesturesEnabled(false);
    }

    public void onLocationChanged(UserInfo userInfo) {
        Marker marker = markerHashMap.get(userInfo.getPeerId());
        if (null != marker) {
            marker.remove();
            Log.d("onLocationChanged()", userInfo.getPeerId() + "さんのMarkerをremove()します");
        }
        LatLng currentLocation = new LatLng(userInfo.getLatitude(), userInfo.getLongitude());

        marker = mMap.addMarker(new MarkerOptions()
                .position(currentLocation)
                .title(userInfo.getPeerId()));

        markerHashMap.put(userInfo.getPeerId(), marker);
        Log.d("onLocationChanged()", userInfo.getPeerId() + "さんのMarkerを更新しました");

        Log.d("onLocationChanged()", "markerの数は" + markerHashMap.size() + "です");

        if (userInfo.getPeerId().equals(myUserInfo.getPeerId())) {
            marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.my_pin));
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocation, 18));
        }
        // 他端末のPinは緑色が基本
        else {
            marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
            marker.setAlpha(0.7f);
            markerList.add(marker);
            markerHashMap.put(marker.getTitle(), marker);
        }
    }

    // 視覚的方向変更
    public void setOrientation(float dirAngle) {
        Marker marker = markerHashMap.get(myUserInfo.getPeerId());
        if (null != marker) {
            marker.setRotation(dirAngle);
        }
    }

    private void createCircle() {
        CircleOptions circleOptions = new CircleOptions()
                .center(new LatLng(groupInfo.getLatitude(), groupInfo.getLongitude()))
                .radius(groupInfo.getAreaSize())
                //.fillColor(Color.argb(59, 255, 255, 0))
                .strokeColor(Color.RED)
                .zIndex(1.0f);
        mMap.addCircle(circleOptions);
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る