2014-09-12 3 views
0

클래스에 메서드가 있고 루프에서 계속 실행해야한다고 가정합니다. 앱을 중단하지 않고 어떻게 할 수 있습니까?동일한 클래스의 루프에서 메서드를 호출하려면 어떻게해야합니까?

전경 활동이 변경되고 전경 활동이 변경 될 때마다 알 필요가 있기 때문에이 질문을드립니다.

편집 -

여기에 내가가 열려 특정 활동이 발생할 때마다 있도록 같은 (이 메소드를 호출 할 필요가

public void getForeground() 
{ 


    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    String foreground = am.getRunningTasks(1).get(0).topActivity.getPackageName(); 
    Toast.makeText(getApplicationContext(), foreground, Toast.LENGTH_SHORT).show(); 


} 

지금 현재 활성화 된 전경 활동 -을 얻을 내 코드입니다 페이 스북, 메신저 또는 Whatsapp), 나는 그것에 대해 알아.

어떻게하면됩니까?

맞춤 수신기를 만들거나 ScheduledExecutorService을 사용하는 것 외에 다른 간단한 방법이 있습니까?

위의 방법으로 해결할 수 있다면 어떻게해야합니까?

답변

1

액티비티 라이프 사이클에서 이동 중지() 또는 onResume도 ONSTART() 메소드의 장점을 크게 당신이이 방법을 간단하게 할 수 메모리 및 장치를로드 루프를 사용

@Override 
public void onResume() { 
    super.onResume(); // Always call the superclass method first 
} 

enter image description here

이 상태에서 재개 활성 전경에 사용자 승 상호 작용 그거야. (또한 때때로 "실행" 상태 라 함.)

이 상태에서 일시 정지 활동 부분적 전경의 다른 활동 다른 활동에 의해 가려은 반투명 또는 커버되지 않은 전체 화면. 일시 중지 된 활동은 사용자 입력을받지 않으며 코드를 실행할 수 없습니다.

중지됨이 상태에서 사용자는 이 보이지 않고 완전히 숨겨져 있습니다. 그것은 배경으로 간주됩니다. 이 중지 된 동안 활동 인스턴스와 구성원 변수와 같은 모든 상태 정보는 유지되지만 코드를 실행할 수는 없습니다.

+0

그래,이 일할 수있는이 방법을 이동합니다. 하지만 몇 가지 설명이 더 필요합니다. onResume()에서 함수를 호출하면 함수가 한 번만 실행됩니다. 그렇습니까? 계속 활성화하려면 OnResume()에서 호출 한 후 무엇을해야합니까? – Deathstroke

+0

설명으로 편집 됨 –

+0

더 명확해야했습니다. 내가 감시하고 싶은 활동은 나로 수정할 수 없다.Messenger 나 Whatsapp와 같은 앱을 열 때마다 알 수 있는지 알고 싶습니다. – Deathstroke

0

메소드를 실행하려면 새 스레드를 사용하십시오. 편집 된 경우

public void yourMethod() { 
    doStuff(); 
    new Thread() { 

     public void run() { 
      yourMethod(); 
     } 
    }.start(); 
} 
+0

메모리가 많이 과부하되지 않습니까? 내 말은, 만약 내가 정말 오랜 시간 동안 그것을 활성화시켜야한다면, 여전히 효과가 있겠는가? – Deathstroke

+0

나는 그것이 작업에 걸리는 시간에 달려 있다고 생각한다. –

+0

음,이 방법은 포어 그라운드에있는 현재 활동을 가져옵니다. 시간이 너무 많이 걸리지는 않습니다. – Deathstroke

0

당신은 더 나은

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
String foreground; 

Handler handler = new Handler(); 

handler.postDelayed(new Runnable() 
{ 

@Override 
public void run() 

{ 

foreground = am.getRunningTasks(1).get(0).topActivity.getPackageName(); 
    Toast.makeText(getApplicationContext(), foreground, Toast.LENGTH_SHORT).show(); 

} 
}, 10000); //every 10 seconds 
+0

나는 이것을 시도했지만 이것은 실제로 작동하지 않는다. 이 전체 코드 스 니펫을'getForeground()'함수에 넣은 다음'OnCreate()'메서드에서 호출했습니다. 그게 내가 어떻게 해야하는거야? – Deathstroke

관련 문제