2014-07-16 2 views
1

내 안드로이드 응용 프로그램이 개 활동이있다 : 첫 번째 (MainActivity)에서안드로이드 새로 고침 활동

을, 사용자는 일부 매개 변수를 선택하고 이러한 매개 변수는 두 번째 활동 (디스플레이)로 전송됩니다. 두 번째 활동은 웹 서비스를 호출하고 선택한 매개 변수에 따라 웹 서비스가 값을 반환합니다. 반환 된 값을 사용하여이 값의 진화에 대한 막 대형 차트를 그립니다.

Timer t = new Timer(); 
t.scheduleAtFixedRate(new TimerTask() { 
    public void run() { 
     finish(); 
     startActivity(getIntent()); 
    } 
},10000, 10000); 

그래서 매 10 초, 두 번째 활동이 다시 호출하고, 막대 차트가 새 반환 된 값으로 업데이트됩니다 : 나는이에서 onCreate() 함수에 넣어 두 번째 활동 타이머를 만든 이유입니다.

문제는 두 번째 또는 세 번째 타이머 실행 후 여러 번 동일한 활동 값이 여러 번 호출 된 것처럼 동일한 값이 반환된다는 것입니다. 그런 다음 응용 프로그램이 정지되기 시작합니다 (닫히지 않음). http://android-graphview.org/
가 나는 또한 위의 웹 사이트 (resetData 및 대한 appendData)에 제공하는 기능을 사용하여 시도했다, 또한 무효화() 함수를,하지만 아무것도 작동 :

나는이 라이브러리에 의해 제공되는 차트를 사용하고 있습니다.
이 문제가 발생하는 이유는 무엇입니까? 활동을 새로 고치는 내 방식이 잘못 되었습니까?

+0

활동 대신 차트를 새로 고치지 않는 이유는 무엇입니까? – Marius

+0

차트를 업데이트 할 수 있도록 새 값을 얻기 위해 웹 서비스를 다시 호출해야합니다. – user3774435

+0

그런 다음 웹 서비스를 호출 한 다음 차트를 업데이트하십시오. 왜 당신의 활동을 다시 시작해야하는지 알 수가 없습니다. 활동의 올바른 사용법을 알아 보려면 [여기] (http://developer.android.com/reference/android/app/Activity.html)를 참조하십시오. – Marius

답변

0

당신이 그것을 설명하는 방법은 :

  1. 두 번째 활동 각 타이머의 목적은 두 번째 활동을 호출하는 것입니다
  2. 의 모든 호출로 새로운 타이머 (2 참조) 작성 (1 참조 .) 매 10 초

결과적으로 두 번째 활동이 시간의 함수로 호출되는 시간은 기하 급수적으로 증가합니다.

가능한 해결 방법은 주 활동의 onCreate 메서드로 타이머를 이동하고 여전히 두 번째 활동을 호출하는 것입니다. 이렇게하면 언제든지 정확하게 하나의 Timer가 활성화되어야합니다.

EDIT : Marius에 의해 논평 된 것처럼 활동이 최적의 선택이 아닐 수도 있습니다. 사용자 입력이없고 해당 활동이 웹 서비스를 호출하고 결과를 반환하는 경우에만 주 활동에서 호출 한 메소드로 충분합니다.

+0

매력 작품처럼, 백만 달러 감사! – user3774435

0

먼저 finish()을 호출하고 활동을 시작하면 아니요 좋은 IDEA입니다.

두 번째로, 시나리오를 이해 한대로 Timer 내에서 AsyncTask을 호출하는 것이 더 좋은 방법입니다. doInBackground()에서 웹 서비스를 호출 한 다음 onPostExecute()에서 UI를 업데이트하면 finish()으로 전화하지 않고 10 초마다 활동을 다시 시작할 수 있습니다.

마지막으로 액티비티가 호출되는 Timer 인스턴스가 새로 생성되므로 응용 프로그램에 걸려있는 Timer 인스턴스가 매우 많습니다.