2013-02-05 2 views
1

저는 Assets 폴더에있는 텍스트 파일에서 데이터를 읽는 것을 포함하는 앱을 만들고 있습니다. 각 파일에 대해 데이터는 별도의 ArrayList에 저장됩니다. 파일은 활동의 onCreate() 메소드에서 차례대로 읽혀집니다. 모든 텍스트 파일은 총 1.8MB로 합쳐졌으며 에뮬레이터에서는 현재 활동로드에 12 초가 걸립니다. 응용 프로그램이 에뮬레이터에서 충돌하지 않습니다 (약 12 초 소요).Android : Asynch 스레드가 필요합니까?

비동기 스레드에 대해 읽었지만 과거에는 필요가 없었습니다. 나는 사용자에게 활동이 실제로로드되고 추락하지 않았다는 것을 알리기 위해 일종의 메시지 나 진행 바를 가질 계획이었습니다.

그럼 내 질문은 : 활동을로드 할 때 응용 프로그램이 중단되지 않더라도 비동기식 또는 다른 스레드에 파일 읽기를 계속해야합니까? 그렇다면 어떻게해야 제대로 할 수 있습니까? (내가 전에 그것을 한 적이 없다.)

다음은 텍스트 파일의 읽기와 샘플 코드입니다 : 어떤 도움을 주시면 감사하겠습니다

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_name); 

    populateArrayLists(); 

} 

public void populateArrayLists() { 
    BufferedReader br = null; 
    try { 
     br = new BufferedReader(new InputStreamReader(getAssets().open(
       "text1.txt"))); 
     String text; 
     while ((word = br.readLine()) != null) { 
      ArrayList1.add(text); 
     }       
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      br.close(); // stop reading 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 


    br = null; 
    try { 
     br = new BufferedReader(new InputStreamReader(getAssets().open(
       "text2.txt"))); 

    // the same process is duplicated for 1-15 
    // it may not be the best or most efficient way but it works 

.

답변

0

네, 이에 대한 백그라운드 스레드가 필요합니다. Loader api은 가장 쉬운 방법입니다.

이렇게하면 파일이로드되는 동안 최소한 알림을 표시하고 일부 콘텐츠를 제공 할 수 있습니다. 데이터를로드하고 점진적으로 데이터를 표시하는 경우도 있습니다.

편집 : 로더는 compatibility library에서 사용할 수있는 3.0 기능입니다. 종속성을 추가 할 의사가 없으면 항상 AsyncTask으로 폴백 할 수 있습니다.이 경우 this을 살펴볼 수 있습니다.

+0

가능한 한 내가 기꺼이 시작할 수 있도록 도와 주시겠습니까? –

+0

Android를 한동안 사용하지 않았으므로 코드를 작성하는 데 시간이 많이 걸리지 않습니다. (재 학습이 많이 필요할 것입니다.) 나와 함께 채팅방을 시작하면 도움을 드리겠습니다. 너 할 수있어. – slezica

+0

좋아. 나는 실제로 내 시도에 대한 또 다른 질문을 열었습니다. (내 연결된 질문을보십시오). 시도한 것을보고 (아마도 무언가를 발동시킬 것입니까?) 귀하의 의견을 말하도록하십시오. –

관련 문제