我是Android開發人員的初學者,正試圖製作一個應用程序,其要求是在文本框中顯示隨機數,並繼續顯示一秒或任意可編程延遲的隨機數,直到時間切換按鈕處於「開」狀態。有沒有人對此有過建議,或者如果可能的話,共享部分源代碼會很好。Android切換按鈕
另一個建議,我會需要的是關於任何好的書開始與Android的發展與內部細節也。如果在Android上任何種類的書,作爲我們對其他開發語言(例如:完全參考到Java,完整參考,以C,C++等)提前
感謝
我是Android開發人員的初學者,正試圖製作一個應用程序,其要求是在文本框中顯示隨機數,並繼續顯示一秒或任意可編程延遲的隨機數,直到時間切換按鈕處於「開」狀態。有沒有人對此有過建議,或者如果可能的話,共享部分源代碼會很好。Android切換按鈕
另一個建議,我會需要的是關於任何好的書開始與Android的發展與內部細節也。如果在Android上任何種類的書,作爲我們對其他開發語言(例如:完全參考到Java,完整參考,以C,C++等)提前
感謝
我看過一些Andoid書我強烈建議Android in Practice。讀完之後,你會知道大多數人在這裏提出的關於StackOverflow的問題都會從本書中獲益。這是極好的價格價值,作者明確知道他們在寫什麼。
編輯:關於執行(更新淘汰布爾)
public final class MyActivity extends Activity implements Runnable {
private Handler uiThreadHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
// basics
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout);
// find text widget here, store in editText as also required in Chintan's solution
// get the current activity's handler, it's the UI thread
uiThreadHandler = new Handler();
// initiate the updates if that's the initial state
scheduletUpdate();
// register callbacks for button etc as required also in Chintan's solution
}
@Override
public void run() {
//update your editText field here -- this is run in the UI thread so it's safe!
scheduleUpdate();
}
private void scheduleUpdate() {
uiThreadHandler.postDelayed(this, 1000); // 1000 ms
}
// etc, some stuff missing
}
編輯:關於如何停止執行run()
方法的調度,可以使用下面的代碼,這應該是顯而易見的從Handler documentation(更新淘汰布爾):
uiThreadHandler.removeCallbacks(this);
我可以知道,停止這個'uiThreadHandler.postDelayed(this,1000)'的代碼在哪裏?'。因爲它的切換按鈕,因爲當我的切換按鈕關閉時,它必須停止更新。 –
@ChintanRathod查看我更新的答案。你對Handlers不是很熟悉,對嗎? –
@ChintanRathod正如我想到的,我真的可以擺脫processUpdates標誌,這隻會在真正併發存在的情況下才有用 - 這裏不是這種情況。感謝您激勵我提供更加優雅,精益的解決方案。現在將更新我的答案。 –
作爲一個初學者,我建議你去個粗糙的http://www.mybringback.com/series/android-basics/這個教程,你將能夠做到你自己所要求的。他們也很容易跟蹤視頻教程。
使用Thread
一樣,
class MyThread extends Thread
{
private volatile boolean isRunning = false;
public synchronized void requestStop() {
isRunning = true;
}
@Override
public void run() {
//place code here...
try {
while (!isRunning) {
// do your coding
handler.sendMessage(handler.obtainMessage(WhatAbout.CHANGE_TEXT.ordinal(), 0, 0));
Thread.sleep(1000 * 1); //1000 ms = 1 sec
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
現在定義下面的代碼來處理多個消息。
public enum WhatAbout {
CHANGE_TEXT
}
public WhatAbout[] wa = WhatAbout.values();
然後用[處理器] [1],它可以幫助您溝通BackgroundThread
和UIThread
。 不使用處理程序,您不能更改UI
。
將以下代碼放入onCreate
方法中。
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what < wa.length) {
switch (wa[msg.what])
{
case CHANGE_TEXT:
editText.setText(randomVariable);
break;
}
}
};
當您關閉開關時,請使用以下代碼停止線程。
if (thread != null) {
thread .requestStop();
thread = null;
}
您的解決方案對我來說似乎相當複雜。我不認爲他會需要一個線程。爲什麼你忽略線程中斷並引入你自己的標誌? –
@ClassStacker,你有任何解決方案,然後呢?你已經發布了一個答案,只是一個實用的教程建議。它被認爲是答案嗎?你不能發表評論? –
看到我更新的答案。 –
我會建議http://www.vogella.com,它有很好的教程。 –
@ChintanRathod我不同意。我很少在vogella.com上找到有用的文章。 –
如果你正在學習Android開發,你爲什麼要求代碼。你想讓自己學習還是從中學習? – Reno