1. ホーム
  2. android

アプリケーションがメインスレッドで過剰に作業している可能性があります。

2022-02-16 08:02:53

振付師

37フレーム飛ばした!?アプリケーションがメインスレッドで仕事をしすぎている可能性があります。


原因 ------ メインスレッドでいろいろ操作しすぎです。おそらく、ページの更新頻度が高すぎるのでしょう。

        回避策 (1)マーカーを追加して、不要なページ更新を減らす。

                            (2) ビューの post() または postDelayed() メソッドを呼び出すことで、ビューが完全に表示された後にツリーの更新作業を行うことができます。

                            (3) ビューの表示・非表示状態を判断するためにview.isShown()を呼び出す回数が多すぎる isShown()は実はちょっとした鶏餌(ソースコード参照 ←_←)、ビューの表示・非表示状態を識別するには単純なブール変数でOK、パフォーマンスは犠牲にしない; isShown()もちょっとした曲解で、そのメソッドを呼ぶと親コントロール自体を指している場合がある ←_← というところです。


さて、もう限界なので、同じような悩みを抱えている方、参考になれば幸いです~~。 

    /** Press state when or not ***/
    private boolean isDown;
    /* Whether the recording screen is displayed or not **/
    private boolean isTimeShown;
    /** whether to cancel the recording interface **/
    private boolean isCancelShown;
            	// Show the recording page
            	if(!isTimeShown){
            		audio_time.setVisibility(View.VISIBLE);
            		isTimeShown = true;
            	}
            	if(isCancelShown){
            		audio_cancel.setVisibility(View.GONE);
            		isCancelShown = false;
            	}
            	if(!isDown){
            		isDown = true;
            		audio_match.postDelayed(new Runnable() {
						@Override
						public void run() {
		            		audio_match.setBackgroundColor(getResources().getColor(R.color.record_btn_bg_c));
		            		audio_match.setTextColor(getResources().getColor(R.color.white));
						}
					}, 15);
            	}