2014-09-12 88 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(); 


} 

,我需要調用此方法,以便它只要有已經打開特定活動(如Facebook,Messenger或Whatsapp),我知道它。

我如何做到這一點?

除了創建自定義偵聽器或使用ScheduledExecutorService之外,還有更簡單的方法嗎?

或者如果可以使用上述方式完成,我該怎麼做?

回答

1

使用循環將嚴重加載你的記憶和您的設備 你可以簡單地做這樣

採取的onStop()或的onResume甚至在onStart()方法的優點,從你的活動週期

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

enter image description here

續在該狀態下,活動是在前臺,並且用戶可以 相互作用瓦特ith。 (有時也被稱爲「跑步」 狀態)

暫停在該狀態下,活動部分地被另一個 活動的其他這是在前臺活動遮蔽是 半透明或不覆蓋整個屏幕。暫停的 活動未收到用戶輸入並且無法執行任何代碼。

已停止在此狀態下,活動完全隱藏,而不是 對用戶可見;它被認爲是在後臺。當 停止時,活動實例及其所有狀態信息(如 成員變量)都會保留,但不能執行任何代碼。

+0

是啊,這可能是工作。但我需要更多的澄清。如果我只是在onResume()中調用函數,它只會運行一次函數,不是嗎?在OnResume()中調用它之後需要做些什麼才能使其持續激活? – Deathstroke 2014-09-12 16:05:32

+0

編輯與解釋 – 2014-09-12 16:09:27

+0

我想我應該更清楚。我想監視的活動不能由我修改。我想知道,如果我可以知道每當像Messenger或Whatsapp已經打開的應用程序 – Deathstroke 2014-09-12 16:11:22

0

使用新的線程來執行該方法。

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

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

這會不會使內存超載很多?我的意思是,如果我必須長時間保持它的活躍狀態,它會繼續工作嗎? – Deathstroke 2014-09-12 16:04:25

+0

我認爲這取決於工作的時間。 – 2014-09-12 17:53:09

+0

那麼,該方法只是獲得當前在前臺的活動,我猜測它並不是太耗時。 – Deathstroke 2014-09-13 05:55:57

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 2014-09-12 17:39:59

相關問題