2014-02-24 58 views
0

我有幾個活動一個接一個地點擊按鈕,但如果按鈕在10秒內沒有點擊下一個活動自動啓動線程的幫助。停止線程無論如何android

button1 = (ImageButton)findViewById(R.id.button2); 
button1.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 

Intent firstIntent = new Intent(Tab1.this, Tab2.class); 
startActivity(firstIntent);     
      finish(); 
     } 
    }); 

Thread background = new Thread() { 
    public void run() { 

    try { 

    sleep(10*1000); 


    Intent i=new Intent(getBaseContext(),Tab2.class); 
    i.putExtra("CountNum", count); 
    startActivity(i); 

    finish(); 

    } catch (Exception e) { 

      } 
     } 
    }; 

    background.start(); 

的問題是:如果我從TAB1去TAB2,然後用一個按鈕,點擊TAB3,然後在10秒TAB2將再次啓動,因爲從TAB1,這是仍在運行的線程(我不知道它以這種方式工作= \)。如何解決它?如果我使用按鈕如何停止線程?在此先感謝

+0

內不要使用一個線程,使用定時器或CountDownTimer。在這裏有很多例子。 – Merlevede

回答

1

有一段時間,.stop()已被棄用,高度不鼓勵,因爲它可能會以不安全的方式終止您Thread

最常用的方法是有一個boolean控制器在Thread內,這將檢查一些動作發生(在你的情況下,一個按鈕被按下),如果是這樣,在一個循環週期,只需在使用return您的Thread。這將徹底和安全地終止它。

---- ----編輯

想這是你的按鈕onClickListener()

boolean has_been_clicked = false; 

but = (ImageButton) findViewById(R.id.your_button_id); 

but.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    // Do the stuff your need 
    has_been_clicked = true; 
    } 
}); 

new Thread(
    new Runnable() { 
    public void run() { 
     while (!has_been_clicked) { 
     // Do your stuff here... 

     ... 
     } 
     // If you've reached this point, it means you have clicked 
     // the button since the value of has_been_clicked is true, 
     // start your Activity here 
     ... 
     startActivity(i); 
     return; 
    } 
    } 
).start(); 
+0

你能通過代碼解釋嗎?我對android開發非常陌生,所以.. – user3158610

+0

當然,看到我編輯的答案,你會找到一個例子。 – nKn

+0

謝謝!有效! – user3158610

0

下面是一個例子,我希望這將有助於我只是修改你的代碼位。

首先創建一個布爾OKToStart,它會利用檢查,如果我們有10秒的圈

button1 = (ImageButton)findViewById(R.id.button2); 
boolean OKToStart =true; 
button1.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
if(OKToStart){ 
Intent firstIntent = new Intent(Tab1.this, Tab2.class); 
startActivity(firstIntent);     
      finish(); 
} 
     } 
    }); 

Thread background = new Thread() { 
    public void run() { 
    while(OKToStart){ 

    try { 

    sleep(10*1000); 


    OKToStart =false 



    } catch (Exception e) { 

      } 
     } 
    }}; 

    background.start(); 
+0

好吧,謝謝,但它不起作用。它沒有改變.. – user3158610