安卓案例:動態時間與開關
阿新 • • 發佈:2018-11-11
1. 執行效果
2. 設計知識
(1)執行緒(Thread)
(2)非同步處理器(Handler)
3. 實現步驟
1、建立安卓應用Time
2、建立佈局檔案activity_time
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <TextView android:id="@+id/tv_time" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="時間" android:textSize="80dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <Button android:id="@+id/one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="開始" android:onClick="doStart"/> <Button android:id="@+id/two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" android:onClick="doStop"/> </LinearLayout>
3、主介面TimeActivity
(1)程式碼
import java.util.logging.LogRecord; import java.util.logging.SimpleFormatter; public class TimeActitity extends Activity { private Thread thread; private Handler handler; private TextView textView; private SimpleDateFormat sdf; private Button button1; private Button button2; private boolean A; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_time); textView = findViewById(R.id.tv_time); sdf=new SimpleDateFormat("hh:mm:ss");//定義時間格式 // 建立訊息處理器,接收子執行緒傳送的訊息進行處理,更新主介面標籤的內容 handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==0x0001){ textView.setText(sdf.format(new Date())); } } }; } //停止按鈕 public void doStop(View v){ A=false;//將布林值設為false執行緒迴圈終止 thread=null;//停止執行緒 } //開始按鈕 public void doStart(View v){ A=true;//開啟迴圈 // 建立執行緒,定時傳送訊息 thread =new Thread(new Runnable() { @Override public void run() { while (A){ handler.sendEmptyMessage(0x0001);//向主執行緒傳送訊息 try { Thread.sleep(500);//執行緒睡眠0.5秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start();//開始執行緒 } //當程式銷燬是停止執行緒 protected void onDestroy() { super.onDestroy(); thread=null; } }
(2)內容講解
開始執行緒與停止執行緒部分,用最簡單的布林值來開關迴圈,實現時間的停止與開始。當啟動開始按鈕時執行緒開始不斷迴圈向主執行緒傳送“0x0001”,當主執行緒收到對於訊息時將我們獲取的系統時間返回到文字框,迴圈傳送達到