博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android项目——实现时间线程源码
阅读量:6457 次
发布时间:2019-06-23

本文共 3508 字,大约阅读时间需要 11 分钟。

hot3.png

  进程

  在Android 中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:
  提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。
  可将多个.apk 包运行在同一个进程里减少系统开销。
  帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。
  像前面描述的一样,进程的属性被用来控制那些有特殊应用组件运行的进程。注意这个属性不能违反系统安全: 如果两个.apk 包不能共享同一个用户ID,却试图运行在通一个进程里,这种情况是不被允许的,事实上系统将会创建两个不同的进程。请查看安全相关文档以获取更多关于安全限制方面的信息。
  线程
  每个进程包含一个或多个线程。多数情况下,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);  }  };  /* 通过进程来持续取得系统时间*/  mThread=new Thread(this);  mThread.start();  }  /* 实现一个Runable接口,实例化一个进程对象, 用来持续取得系统时间*/  @Override  public  void run() {  // TODO Auto-generated method stub  try {  do  {  long Time=System.currentTimeMillis();  myCalendar=Calendar.getInstance();  myCalendar.setTimeInMillis(Time);  mHour=myCalendar.get(Calendar.HOUR);  mMinutest=myCalendar.get(Calendar.MINUTE);  mScond=myCalendar.get(Calendar.SECOND);  Thread.sleep(1000);  /* 重要关键程序:取得时间后发出信息给Handler */  Message msg=new Message();  msg.what=testAnalogClock.msg_Key;  myHandler.sendMessage(msg);/* 重要关键程序:取得时间后发出信息给Handler */  }  while(Thread.interrupted()==false);/* 当系统发出中断信息时停止本循环*/  } catch (Exception e) {  // TODO: handle exception  e.printStackTrace();  }  }  }
\

转载:http://www.adobex.com/android/source/details/00000159.htm

转载于:https://my.oschina.net/androidcode/blog/103886

你可能感兴趣的文章
Android学习笔记21-ImageView获取网络图片
查看>>
线段树分治
查看>>
git代码冲突
查看>>
poll
查看>>
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
查看>>
JMeter—断言
查看>>
C++的新类创建:继承与组合
查看>>
asp操作access提示“无法从指定的数据表中删除”
查看>>
git bash 风格调整
查看>>
bzoj4589 Hard Nim
查看>>
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>