마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

textView 자동 스크롤링 문제에 대해서 질문합니다.

0 추천
Thread를 돌려 count를 증가시키고 textView에 append 하여 데이터를 뿌려주는 기능을 추가하고있습니다.

set Text를 했을 때는 이상 없이 잘되는데, append를 하게 되면 textView에 많은 텍스트가 쌓여서 그런건지

점차 느려지는 현상을 보이고 있습니다. 아래 쓰레드와 함수 첨부하였습니다.     

 

// Thread Class
    public  class ReadThread implements Runnable {
        private WeakReference<MainActivity> activityRef = null;
        public Message msg = null;
        public ReadThread(MainActivity activity){
            this.activityRef = new WeakReference<MainActivity>(activity);
            msg = new Message();
        }

        @Override
        public void run() {
            
            try{    
                while(!Thread.currentThread().isInterrupted())
                {
                    GetDataFromNative(); // Data 받는 함수
                    UpdateUI(); // Data를 가지고 textView append 하는 함수.
                    Thread.sleep(100);
                }
            }catch(InterruptedException ie){
                Log.e(TAG,"InterruptedException");
            }        
            catch(RuntimeException ee){
                Log.e(TAG,"RuntimeException");
            }       
        }
    }

 

    public void GetDataFromNative() {
        runOnUiThread(new Runnable() {
            @Override
            public  void run() {
                SA = CAN1Comm.Get_RX_SOURCEADDR();
                PS = CAN1Comm.Get_RX_PS();
                PF = CAN1Comm.Get_RX_PF();
                PRIORITY = CAN1Comm.Get_RX_PRIORITY();
                i = i + 1;
            }
        });
    }

    public void UpdateUI() {
        // TODO Auto-generated method stub
        runOnUiThread(new Runnable() {
            @Override
            public  void run() {
                //readThread.interrupt();
                //Log.d(TAG, "Update UI");
                // TODO Auto-generated method stub
                //StringBuilder sb = new StringBuilder("\n + i" + i);
                textView.append("\n SA : " + SA + " PS : " + PS + " PF : " + PF + " PRIORITY : " + PRIORITY + " i : " + i);                
                //autoScrollBottom(textView);
                
                //readThread.run();
            }
        });
    }

 

다음과 같이 두함수를 반복해서 textView에 append 하고 있지만 일정 크기 이상 되면 느려지는 현상이 나타납니다. runOnUiThread도 사용하였고, post, postDelayed 다사용해 보았지만 현상 개선이 안되서 질문 드립니다. 혹시 TextView에 쓸수 있는 최대 버퍼 크기가 따로 정해져있는지도 궁금합니다.
Itgunny (120 포인트) 님이 2017년 1월 12일 질문

1개의 답변

0 추천

비슷한 이슈로 애먹은 적 있습니다. 

xml 파일을 생성하면서,  별생각없이 

"+" 연산자로 String을 추가하니 10k 정도의 xml을 생성하는데,  1분이 넘게 걸렸습니다.  

이걸  StringBuilder 로 변경하니 5초 내에 완료 되더군요..

아래 링크는 다른분이 테스트 해주신 사항입니다.

http://egloos.zum.com/deblan2/v/419830

StringBuffer 로 전체 데이터를 append 하고 계시다가,

setText로 StringBuffer 값을 TextView에 설정하는 방식으로 구현 해보시는게 좋을 듯 합니다.

익명사용자 님이 2017년 1월 12일 답변
2017년 1월 12일 수정
...