2012-04-02 1 views
3

나는 3 개의 회 전자를 가진 활동이있다. 이 스피너는 약 1 분이 걸리는 방법으로 웹 서비스에서 데이터를 가져옵니다.활동을 표시 한 후 코드를 어떻게 실행합니까?

먼저 Activity를로드하고 가시화 된 후 해당 웹 서비스 메소드를 호출하고 데이터를로드하려고합니다. 다음 코드는 별도로 테스트했지만 어느 누구도 내 문제를 해결하지 못했습니다. 이 샘플에서는 애플리케이션이 검은 색 화면으로 이동하고 웹 서비스 작업이 완료되면이를 볼 수 있습니다.

@Override 
protected void onCreate() { 

    //.........  


    final Runnable r = new Runnable() 
    { 
     public void run() 
     { 
      loadMyData(); 
     } 
    }; 
    Utilities.performOnBackgroundThread(r);  
} 

@Override 
protected void onResume() { 

    new Thread() { 
     @Override 
     public void run() { 
      loadMyData(); 
     } 
    }.start(); 
    super.onResume(); 

} 

@Override 
protected void onStart() { 
    if (comesFromOnCreateMethod) 
    { 
     final Runnable r = new Runnable() 
     { 
      public void run() 
      { 
       loadMyData(); 
      } 
     }; 
     Utilities.performOnBackgroundThread(r); 
    } 
    comesFromOnCreateMethod = false; 
    super.onStart(); 
} 

@Override 
protected void onResume() { 

    if (comesFromOnCreateMethod) 
    { 
     final Runnable r = new Runnable() 
     { 
      public void run() 
      { 
       loadMyData(); 
      } 
     }; 
     Utilities.performOnBackgroundThread(r); 
    } 
    comesFromOnCreateMethod = false; 

} 

답변

4

당신이 검은 화면을 받고 있다면, 난 당신의 코드에서 UI 스레드에서 실행되지되고 가정 것 배경이 표시되어 작업이 완료 될 때까지 UI가 중단됩니다.

배경 작업을 수행하는 가장 좋은 해결책 중 하나는 AsyncTask입니다. 이것을 사용하여 onCreate() 메서드에서 호출 할 수 있으며 완료되면 UI 스레드에 대한 콜백을 게시하여 데이터를 표시 할 수 있습니다.

이 활동이 표시 될 때마다이 메소드를 실행하려면 onResume()에서 호출하십시오. 그렇지 않으면 onCreate()에서 호출하십시오.

+1

내 언급 된 코드는 스레드입니다. 왜 내 코드가 작동하지 않지만 AsyncTask가 작동 했나요? : - ?? – breceivemail

+0

코드의 일부가 UI 스레드로 유출되어 정지하게됩니다. – Mimminito

1

우선, 허용율을 높이고 싶을 수 있습니다. 39 %는 상당히 낮습니다.

어쨌든 AsyncTask를 확인하고 싶을 수 있습니다. http://developer.android.com/reference/android/os/AsyncTask.html

일반적으로 onPreExecute에서 초기화하고 doInBackGround에서 네트워킹을 수행 한 다음 결과를 OnPostExecute의 UI 스레드로 설정하려고합니다. 희망이 도움이 될 것입니다.

2

onCreate에서 다른 사람들과 마찬가지로 비동기 작업을 수행하십시오. 먼저 앱의 콘텐츠를 생성 한 다음 asyncTasks를 호출해야합니다. 콜백에서 스피너를 제어 할 수 있습니다.

1

AssynchTask()을 사용하고 super를 호출해야합니다. onResume() 또는 각 라이프 사이클 방법의 라이프 사이클 방법 먼저 다음 다른 특정 방법을하고 싶지 ....