2014-09-22 91 views
1

我有兩個類。一個使用Thread,另一個使用活動。從線程調用活動

public class MainActivity extends Activity 
{ 
    public void incrementCounter(int amount) 
    { 
     counter += amount; 

     Log.d("WHY", "why you no print"); 
    } 
} 

然後在活動中使用計數器以滿足其需要。

它實現了一個線程另一類是這樣的:

public class ScoreSystem implements Runnable 
{ 
    private int count = 0; 
    private MainActivity reference; 

    public void run() 
    { 
     Looper.prepare(); 

     while(true) 
     { 
      if(count >= 100 && reference != null) 
      { 
       //gets inside the if statement just fine 
       reference.incrementCounter(count); 
       count = 0; 
      } 
      count++; 
     } 
    } 
} 

的問題是,reference.incrementCounter(count);從來沒有真正運行。 該引用不爲空並指向正確的活動。我沒有發佈代碼的一部分,因爲它是微不足道的,不會幫助任何人,但浪費你的時間。

如何確保我的線程調用活動?

+1

有兩個解決方案。您需要在Thread類中使用MainActivity引用,否則您需要將「incrementCounter」方法創建爲Static。 – SilentKiller 2014-09-22 06:22:19

+0

我有參考。如果我將'incrementCounter()'移到線程之外,那麼它可以工作,但不在線程內。 – klaux 2014-09-22 06:23:43

+0

你沒有初始化或分配任何東西到'MainActivity引用;' – SilentKiller 2014-09-22 06:25:07

回答

0

您可以incrementCounter()靜態爲SilentKiller說和runOnUIThread調用它通過一些處理程序或UIThread,因爲MainActivity是UIThread它可以在後臺線程會導致問題。

somethinglike:

runOnUiThread(new Runnable() 
{  
     public void run() 
     { 
     reference.incrementCounter(count); 
     } 
} 

public static void incrementCounter(int amount) 
{ 
    // do your code 
} 

並再次檢查計數的邏輯。

+0

請解釋'runOnUiThread'的作用,它會像我的其他線程一樣平行運行,還是會它將自己附加到主UI線程?這也會每次創建一個新的線程?我寧願重複使用該線程。請不要只在我身上編碼。也不要太擔心'靜態'我知道它,並不需要它。 – klaux 2014-09-22 06:40:55

+0

@Ranjit'runOnUiThread'不需要。 – SilentKiller 2014-09-22 06:42:10

+0

@klaux runOnUiThread會在mainThread中運行你的程序..不會每次都不會創建新的線程..只是運行它寫在主線程中的程序..像處理程序一樣的工作.. – Ranjit 2014-09-22 06:47:07

-1

活動保證obj始終爲空。

public class ScoreSystem implements Runnable 
{ 
    private int count = 0; 
    private MainActivity reference; 

    public ScoreSystem(MainActivity reference) { 
     this.reference = reference; 
    } 

public void run() 
{ 
    Looper.prepare(); 

    while(true) 
    { 
     if(count >= 100 && reference != null) 
     { 
      //gets inside the if statement just fine 
      reference.incrementCounter(count); 
      count = 0; 
     } 
     count++; 
    } 
    } 
} 
+0

我只能說LOL並學會閱讀。 – klaux 2014-09-22 07:26:13

+0

好吧,我知道你需要什麼。 – raja 2014-09-22 07:37:18