2011-03-21 18 views
0


我在Android中創建了一個示例/演示/測試程序,運行得非常好,如果您在下面看到,您會看到我已創建線程。現在我想創建另一個線程來處理另一個處理程序......因爲我不能有兩個run()方法......我該怎麼做?Android:兩個或更多線程? (Program正在工作)

這是我的(工作 - 沒有錯誤)程序:

package com.ryan1; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.widget.TextView; 

public class main extends Activity implements Runnable{ 

int level = 0; 
int seconds_running=0; 

TextView the_seconds,the_level; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    the_seconds = (TextView) findViewById(R.id.textview_seconds); 
    the_level = (TextView) findViewById(R.id.textview_level); 

     Thread thread = new Thread(this); 
     Thread thread2 = new Thread(this); 
     thread.start(); 
     thread2.start(); 
} 

public void run() { 

    while(seconds_running<500) 
    { 
     if(seconds_running %5 ==0){level++;}  

      try { 
       handler.sendEmptyMessage(0); 
       int a = 1000 - (level*100); 
       if(a<=100){a=25;} 
       Thread.sleep(a); 
       System.out.println("R "+Thread.currentThread()); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
    } 

     } 



private Handler handler = new Handler() { 

       @Override 

       public void handleMessage(Message msg) { 

        seconds_running++; 
        int a = 1000 - (level*100); 
        the_seconds.setText(" "+seconds_running); 
        the_level.setText(level+" "+a); 
       } 

     }; 



} 

回答

5

使用匿名類這樣的。

Thread thread2 = new Thread(new Runnable() { 

     public void run() { 
      // code here with your new handler 
     } 
    }); 
+0

完美運作!謝謝! – Ryan 2011-03-21 05:43:33

1

使繼承Thread兩個內部類。

爲這兩個類創建一個對象並在這些對象上調用start。

+0

我是一種新的Android/Java,你能給我一些你寫的代碼嗎? – Ryan 2011-03-21 05:11:18

1

你在暗示你想要兩個runnables,但你只有一個可定義的runnable,這是你的'主要'類。所以你需要做的是做兩個不同的runnables,這樣每個人都可以有自己的代碼可以運行。

我會做兩個新的類,讓我們說,Runnable1和Runnable2。我會讓他們都實現可運行的接口。它們中的每一個都可以包含不同的代碼以在單獨的線程中運行。

最後,我會改變你的線程創建/啓動代碼看起來像這樣:

Thread thread = new Thread(new Runnable1()); 
    Thread thread2 = new Thread(new Runnable2()); 
    thread.start(); 
    thread2.start(); 
+0

我對Android/Java很陌生,你是指內部類還是普通類,然後擴展它們? (我認爲下面的其他海報意味着相同的東西) – Ryan 2011-03-21 05:10:31

+0

你可以做任何一個。將會有很多方法來做大部分事情。當我提出我的答案時,我主要建議創建兩個新的頂級類(不是內部類),儘管這兩種方法都可以正常工作。我想對於一個初學者來說,現在只需從頂級課程開始就會比較容易。 – 2011-03-21 13:22:02