一个小倒计时程序 菜鸟级别的我

xiaoxiao2021-02-27  384

怎么说呢,今天刚刚做了一个小的程序,然后两节课做完了,感觉自己挺棒的,就想写下来,挺简单的,新学了一个Handler消息机制原理。

上一次写了一个没有图片,这一次一定要有图片!

总体就是这样的

开始吧,其实才开始在MainActivity.xml中写一个TextView和Button,分别弄好id和textsize。

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.administrator.mytimer.MainActivity"> <TextView android:text="10" android:textSize="100sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:id="@+id/Number" /> <Button android:text="start" android:textSize="20sp" android:background="@null" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/Number" android:layout_centerHorizontal="true" android:layout_marginTop="30dp" android:id="@+id/button" android:onClick="start" /> </RelativeLayout> package com.example.administrator.mytimer; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView Number; private int count = 10; public static final int UPDATE_TIME=1; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg){ super.handleMessage(msg); switch (msg.what){ case UPDATE_TIME:Number.setText(count+""); } } }; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Number = (TextView) findViewById(R.id.Number); } public void start(View view) { new Thread(new Runnable() { @Override public void run() { while (count > 0) { count--; Message message=new Message(); message.what=UPDATE_TIME; handler.sendMessage(message); //Number.setText(count + ""); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } }

现在来写MainActivity.java页面,你会发现我们会出现一些问题,比如说10停在页面,变成9之后退出,或者直接变成0。

我们需要了解Handler机制主要包括4个关键对象,分别是Message、Handler、MessageQueue、Looper。

1、Message

Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。

2、Handler

Handler就是处理者的意思。它主要用于发送消息和处理消息。一般使用Handler对象的sendMessage()方法发送消息,发出的消息经过一系列的辗转处理后,最终会传递到Handler对象的handlerMessage()方法中。

3、MessageQueue

MessageQueue是消息列队的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。每个线程中只会有一个MessageQueue对象。

4、Looper

Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入一个无限循环中。然后,每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的HandlerMessage()方法中。

挺简单的,可以做做。

转载请注明原文地址: https://www.6miu.com/read-1292.html

最新回复(0)