Android项目——实现时间线程源码

线程

每个进程包含一个或多个线程。多数情况下,Android

避免在进程里创建多余的线程,除非它创建它自己的线程,我们应保持应用程序的单线程性。一个重要的结论就是所有呼叫实例, 广播接收器,

以及服务的实例都是由这个进程里运行的主线程创建的。注意新的线程不是为活动,广播接收器,服务或者内容提供器实例创建:这些应用程序的组件在进程里被实例化(除非另有说明,都在同一个进程处理),实际上是进程的主线程。这说明当系统调用时这些组件(包括服务)不需要进程远距离或者封锁操作(就像网络呼叫或者计算循环),因为这将阻止进程中的所有其他组件。你可以使用标准的线程类或者Android

的HandlerThread 类去对其它线程执行远程操作。这里有一些关于创建线程规则的例外:

呼叫IBinder 或者IBinder 实现的接口,如果该呼叫来自其他进程,你可以通过线程发送的IBinder

或者本地进程中的线程池呼叫它们,从进程的主线程呼叫是不可以的。特殊情况下,,呼叫一个服务的IBinder可以这样处理。(虽然在服务里呼叫方法在主线程里已经完成。)这意味着IBinder

接口的实现必须要有一种线程安全的方法,这样任意线程才能同时访问它。

呼叫由正在被调用的线程或者主线程以及IBinder

派发的内容提供器的主方法。被指定的方法在内容提供器的类里有记录。这意味着实现这些方法必须要有一种线程安全的模式,这样任意其它线程同时可以访问它。

呼叫视图以及由视图里正在运行的线程组成的子类。通常情况下,这会被作为进程的主线程,如果你创建一个线程并显示一个窗口,那么继承的窗口视图将从那个线程里启动。

網上看了一些例子,有高手們是直接新建一個類,然後繼承Thread之生重寫run方法,這個項目我將采用第二種寫法,就是繼承直接用Activity去繼承implements

Runnable如:public class testAnalogClock extends Activity implements

Runnable  ,之后我們只要重寫Runnable的實現方法就可以做到同樣的效果。因為網上有很多相似功能,具體代碼將不做過多解釋,我會在項目上一一做注釋,源碼如下:


package cn.terry; 

  

  

import java.util.Calendar; 

     

import android.app.Activity;   

import android.graphics.Color;   

import android.os.Bundle;  

import android.os.Handler;  

import android.os.Message;  

import android.widget.\*; 

  

//使用线程实现的TextView 时钟需要线程Thread、Handler(发送、处理消息)辅助实现 

  

public

  

class testAnalogClock extends Activity implements Runnable{ 

  

    private AnalogClock myAnalogClock; 

  

    private TextView myTextView; 

  

    private Thread mThread; 

  

    private Handler myHandler; 

  

    private Calendar myCalendar;  //日曆類 

   

protected static final int msg\_Key = 0x1234; 

  

 private  int mHour, mMinutest,mScond; 

  

    /\*\* Called when the activity is first created. \*/

  

    @Override

  

    public

  

void onCreate(Bundle savedInstanceState) { 

  

             

        super.onCreate(savedInstanceState); 

  

        setContentView(R.layout.main); 

  

        //模拟时钟的实现不需要额外代码,只需要UI 中添加,其自动显示时间 

  

        myAnalogClock\=(AnalogClock)findViewById(R.id.AnalogClock01); 

  

        myTextView\=(TextView)findViewById(R.id.TextView01); 

        

  

        /\* 通过Handler 来接收进程所传递的信息并更新TextView \*/ 

  

        myHandler\=new Handler() 

  

        { 

  

            @Override 

  

            public 

  

void handleMessage(Message msg) { 

  

                // TODO Auto-generated method stub 

    

switch (msg.what) { 

  

                case testAnalogClock.msg\_Key: 

  

                    if(mMinutest==60) 

  

                    { 

  

                        mHour+=1; 

  

                        mMinutest\=0; 

  

                    } 

  

                    if(mScond==60) 

  

                    { 

  

                        mMinutest+=1; 

  

                    } 

  

                    /\* 在这处理要TextView对象Show时间的事件\*/ 

  

                    myTextView.setText(" 

  

"+mHour+":"+mMinutest+":"+mScond); 

  

                    myTextView.setTextColor(Color.RED); 

  

                    break; 

    

  

                default: 

  

                    break; 

  

                } 

  

                super.handleMessage(msg); 

  

            } 


### 最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

![](https://img-blog.csdnimg.cn/img_convert/1d55637621d3017985d7ef173af2d547.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/723eb1f1977eca6e3bec91875aa3458e.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/57da6c3d13d9edb95691791bc951e2c1.webp?x-oss-process=image/format,png)


加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
  } 


### 最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

[外链图片转存中...(img-yCuepqSn-1725758998321)]

[外链图片转存中...(img-fquVkJjg-1725758998321)]

[外链图片转存中...(img-R7jyXDTb-1725758998321)]


加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值