从线程调用活动

时间:2014-09-22 06:20:16

标签: java android multithreading android-activity

我有两节课。一个使用Thread,另一个使用活动。

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

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

然后在“活动”中使用计数器以满足其所需的一切。

实现Thread的另一个类是:

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);实际上从未运行过。 引用不是空的,并且指向正确的活动。我没有发布这部分代码,因为它是微不足道的,不会帮助任何人,但浪费你的时间。

如何确保我的线程调用活动?

2 个答案:

答案 0 :(得分:0)

您可以将incrementCounter() 静态设置为SilentKiller所说的并通过一些Handler或RunOnUIThread在UIThread中调用它,因为MainActivity来自UIThread,这可能会导致后台线程出现问题。

somethinglike:

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

AND

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

再次检查你的计数逻辑。

答案 1 :(得分:-1)

Activity referance obj始终为null。

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++;
    }
   }
}