내 앱용 서버에서 데이터를 가져오고 있습니다. "getData"기능은 응용 프로그램의 기본 활동 인 스플래시 스레드에 포함되어 있습니다. 내가 겪고있는 문제는 다음과 같습니다.스레드를 완료하기 전에 작업이 완료되었는지 확인하는 방법은 무엇입니까?
앱을로드 한 후 신속하게 뉴스 나 설명을 입력하면 모든 정보가로드되지 않은 것으로 나타납니다 (마지막으로 2 개 또는 3 개의 문자열을 저장할 필요가 있음). 그러나 (스플래시 스레드 완료 후) 주 메뉴를 표시 한 후 앱을 몇 초 더 허용하면 문제가 발생하지 않고 모든 정보가 휴대 전화에 올바르게 저장됩니다. 스플래시 화면을 몇 초 지연 시키려고했지만 실제로는 우아한 해결책이 아니며 항상 작동합니다.
내 질문은 "결국"
내가 어떤 데이터베이스에 데이터를 저장하고 있지 않다 점프하기 전에 난 그냥 다른 클래스의 공공 정적 문자열 배열에서, 함수가 완료되었는지 확인 할 수있는 방법입니다.
당신은 아래에있는 내 코드를 가지고 : 더 읽기와 물리적으로 보이는 초기 질문에 코멘트에 논의를 만들기의 목적을 위해
if(networkAvailable()){
Thread splashTread = new Thread() {
@Override
public void run() {
try {
getData.execute(description_Hyperlinks);
getNews.execute(new String[]{newsJSON_Hyperlink});
getOffers.execute(new String[]{offersJSON_Hyperlink});
for(int i = 0; i<3; i++)
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
finish();
startActivity(new Intent(FlexFormActivity.this, MainMenu.class));
stop();
}
}
};
splashTread.start();
['AsyncTask'] (http://developer.android.com/reference/android/os/AsyncTask)를 사용해야합니다.html). 작업에 대한 작업이 진행될 때 특정 작업을 수행 할 수있는 가능성을 제공합니다. –
getData, getNews 및 getOffers는 AsyncTask 클래스의 인스턴스입니다. – Eugen
그러면 개념을 이해하지 못했을 것입니다. 작업을 수행하는 하나의 'AsyncTask (예 : "LoadContents")를 만드는 것이 더 나은 접근 방법입니다. 이 작업에서는 데이터, 뉴스 및 쿠폰을로드하고 표시 할 수 있습니다. 작업이 끝나면 모든 것이 설정되고 사용자에게 표시 할 수 있습니다. 자바의 executor-framework과 Androids 구현체는 항상 'Thread'를 사용할 필요가있다. –