2013-05-24 2 views
0

내 앱의 한 활동에서 텍스트 필드를 동적으로 편집 한 다음 sharedpreferences의 텍스트로 설정합니다. 나는 이것이 메인 스레드가 처리해야 할 비트가 많다는 것을 알고 있습니다. 어떤 스레드가로드 될 때 응용 프로그램이 약간 지연되는 이유는 무엇입니까? 나는 가장 좋은 방법은 sharedpreferences에서 문자열의 로딩을 다른 스레드에 넣은 다음 로딩 바 (또는 비슷한)를 표시하는 것이 무엇인지 궁금해했다. (메인 스레드에서 추측). 스레드가 나에게 새로운 것이기 때문에 아주 자세하게 설명하십시오.메인 스레드 오버로드

또한 이것에 대한 자습서가 있다면 나에게 올바른 방향을 제시 할 수 있습니다. 미리 감사드립니다.

+1

메인 스레드 만 UI를 변경할 수 있으므로 새로운 스레드에서 sharedpreference 코드를 사용할 수 있습니다. (http://developer.android.com/guide/components/processes-and-threads.html#WorkerThreads) –

+0

감사합니다, 다음 질문을 조금 수정합니다 :) – Nick

답변

1

에게 안내하는 AsyncTask를 당신이 필요로하는 것입니다. AsyncTask를 는 doInBackground() 예에 무거운 작업을 확장하는 클래스 만들기 :

Class Example extends AsyncTask{ 
    @Override 
    protected void doInBackground(Object... args){ 
     //do ur stuff 
    } 
    @Override 
    protected void onPostExecute(Object arg){ 
     //do what you wanna do after doInBackground 
    } 
} 

새로운 예()하여 작업을 호출을 실행();.

1

주 스레드 만 UI를 변경할 수 있지만 AsyncTask 클래스를 사용하면 다른 스레드에서 다른 모든 작업을 수행 한 다음 UI에 배치 할 준비가 된 주 스레드로 푸시 할 수 있습니다.

0

당신이 뭔가를 할 수 있습니다 : 그냥

final ProgressDialog pd = ProgressDialog.show(context, "Title", "Loading"); 
          new Thread(new Runnable() 
           { 

            @Override 
            public void run() 
             { 
              //get data from shared preferences 

              runOnUiThread(new Runnable() 
               { 

                @Override 
                public void run() 
                 { 
                  pd.dismiss(); 
                  //set that text to your dynamic textview 

                 } 
               }); 

             } 
           }).start();