2014-04-08 1 views
0

저는 Android 개발에 처음으로 익숙하며 현재 사람들이 텍스트를 상자에 입력하고 텍스트가 화면의 비트 맵에 표시되는 앱에서 작업하고 있습니다.Android MultiThreading with TextWatcher

변경 사항을 수신하는 활동에 텍스트 상자가 있습니다. 텍스트를 입력 할 때마다 이미지의 텍스트 서식을 지정하는 기능을 호출 한 다음 이미지를 새 텍스트로 업데이트합니다. 텍스트가 조금이라도 괜찮 으면 좋겠지 만, 많이있을 경우 계산 속도가 느려지고 장치가 정지하기 시작하여 타이핑이 거의 불가능합니다.

백그라운드에서 계산을 실행할 수있는 방법이있어서 상자에 입력하는 것이 이미지 업데이트의 영향을받지 않습니까? 나는 여러 스레드를 사용하는 것이 유용 할 것이라고 생각하지만 기능을 얻으려면 스레드에 대해 충분히 알지 못한다. 여기

내 코드입니다 : MrGrinst

당신은 배경

public void afterTextChanged(final Editable editable) { 
    new AsyncTask<Void, Void, Void>() { 
     protected Void doInBackground(Void... params) { 
      pic.setText(editable.toString()); 
      pic.writeText(); 
      return null; 
     } 
     protected void onPostExecute(Void result) { 
      imageView.setImageBitmap(pic.getImage()); 
     }    
    }.execute(); 
} 

당신은 기억할 필요가에서 일을 AsyncTask을 사용할 수 있습니다

답변

2

에게 사전에

public class PicTextWatcher implements TextWatcher { 
    ... 
    public void afterTextChanged(Editable editable) { 
     pic.setText(editable.toString());   //This function is relatively slow 
     pic.writeText();       //This function is very slow 
     imageView.setImageBitmap(pic.getImage()); //This doesn't need to happen every keystroke, only when the other functions have completely finished 
    } 
} 

감사합니다, 지금 pic.setText(editable.toString());pic.writeText();이 수 사용자가 빨리 입력하고 writetext가 느린 경우 여러 번 동시에 호출 할 수 있습니다.

+0

기본적으로 AsyncTasks는 직렬 실행 프로그램이있는 단일 스레드에서 실행됩니다. 여러 스레드에서 실행하려면 executeOnExecutor를 스레드 풀 실행 프로그램과 함께 사용하십시오. – ElDuderino