0

내 문제 : MainActivity에서 XML Parser를 통해 인터넷에서 일부 데이터를 다운로드하기 시작합니다. 이 데이터는 내 앱의 모든 화면에 표시됩니다. 그것은 데이터베이스와 같습니다.현재 포어 그라운드 활동을 감지하고 다시로드하십시오.

데이터를 다운로드하고 저장하는 동안 앱 사용자는 구멍 앱을 탐색 할 수 있습니다. 데이터 다운로드 및 저장이 완료되면 현재 전경 작업을 감지하고 다시로드하려고합니다. 새 데이터를 표시하려면이 작업을 수행해야합니다.

ActivityManager를 사용하여 현재 Activity를 감지 할 수 있으며 "startActivity (Intent.makeMainActivity (componentName)"메서드를 사용하여 ComponentName을 사용하여 시작할 수 있습니다.하지만 이전 활동은 ActionBar- BACK 버튼. 내가 데이터를 다운로드 한 후 AsyncTasks onPostExecute-방법에서이 작업을 수행. 그것을 수행하는 방법

어떤 아이디어가?

protected void onPostExecute(MainActivity.UrlParams result) { 
    Toast.makeText(result.contextMain, "Daten wurden erfolgreich aktualisiert!", Toast.LENGTH_LONG).show(); 
    //Aktualisiert aktive Activity damit die neuen Daten angezeigt werden! 
    ActivityManager am = (ActivityManager) result.contextMain.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    Log.d("topActivity", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName()); 
    ComponentName componentInfo = taskInfo.get(0).topActivity; 
    componentInfo.getPackageName(); 
    Intent intent = Intent.makeMainActivity(componentInfo); 
    result.contextMain.startActivity(intent); 

    //myApp.getCurrentActivity().set 
} 

답변

1
  1. 은 데이터 다운로드가되지 AsyncTask를
  2. ,617에, 서비스
  3. MainActivityBroadcastReceiver을 등록하고 onStart()에 등록하고 onStop()에서 등록을 취소하십시오. 이 수신기에서보기를 새로 고칩니다.
  4. 데이터가 다운로드되면 데이터를 준비 할 수 있도록 브로드 캐스트를 만듭니다. 이 방법의 단점은 데이터를 어딘가에 저장해야한다는 것입니다. 물론 데이터가 작은 경우에만 데이터를 전달할 수 있습니다.
+1

"EventBus'''라는 라이브러리가 있는데,이 라이브러리는 매우 훌륭합니다. 라이브러리를 사용하고 싶지 않다면 Tomasz가 제안한 것이 최선의 접근 방식입니다. – danypata

+0

감사합니다. 그러나 이것을 수행하는 간단한 방법이 있습니까? – Goetti

+0

danypata가 언급했듯이, 당신은'EventBus' 라이브러리를 사용할 수 있습니다. 나는 이것이 가장 단순하고 좋은 방법이라고 생각한다. 해킹과 코드가 흐트러지지 않는다. –