cocos2dx的计时器很好用,但当app进入后台,其计时器会pause掉,如果想要一个稳恒计时器就得自己去实现完成了,在Cocos2d-x for ios中我们可以利用NSTimer类并结合objc++来实现,非常好用。在Android平台我们就不得不用java类和jni来实现,计时器很多时候是用来刷新UI,所以还得考虑opengl线程调用问题

下面我贴了一个用java线程来实现的类,这个是项目正在使用的部分代码。一个是秒计时器,用于倒计时使用;一种是毫秒计时器,取网络数据包时使用

package com.iGamer;

import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView; public class TimerJavaToC
{ public static String SECOND_TIMER_NAME = "SECOND_TIMER_NAME";
public static String MILSECOND_TIMER_NAME = "MILSECOND_TIMER_NAME"; private Cocos2dxGLSurfaceView mGLSurfaceView = null; private Cocos2dxActivity mActivity; // 定义jni调用函数
private static native void secondTickHandler();
// 调用c++获取网络包
private static native void milsecondTickHandler(); private boolean _isSecondRunFlag = false;
private boolean _isMilSecondRunFlag = false; public TimerJavaToC(Cocos2dxActivity act)
{
mActivity = act;
mGLSurfaceView = Cocos2dxGLSurfaceView.getInstance();
_isSecondRunFlag = true;
_isMilSecondRunFlag = true;
init();
}
private void init()
{
Thread secondThread = new Thread(new Runnable()
{
public void run()
{
try
{
if (!_isSecondRunFlag)
{
Thread.currentThread().interrupt(); //方法调用终止线程
return ; //跳出run方法
}
while (_isSecondRunFlag)
{
//暂停一秒
Thread.sleep(1000);
mGLSurfaceView.queueEvent( new Runnable()
{
@Override
public void run()
{
//调用jni
TimerJavaToC.secondTickHandler();
}
});
}
}
catch(Throwable t)
{
//jest end the thread
}
} });
secondThread.start();
secondThread.setName(SECOND_TIMER_NAME); Thread milsecondThread = new Thread(new Runnable()
{
public void run()
{
try
{
if (!_isMilSecondRunFlag)
{
Thread.currentThread().interrupt(); //方法调用终止线程
return ; //跳出run方法
}
while (_isMilSecondRunFlag)
{
//暂停一毫秒
Thread.sleep(1);
mGLSurfaceView.queueEvent( new Runnable()
{
@Override
public void run()
{
//调用jni \
TimerJavaToC.milsecondTickHandler();
}
});
}
}
catch(Throwable t)
{
//jest end the thread
}
} });
milsecondThread.start();
milsecondThread.setName(MILSECOND_TIMER_NAME);
}
public void stopAllThread()
{
_isMilSecondRunFlag = false;
_isSecondRunFlag = false;
}
}

Android线程计时器实现的更多相关文章

  1. Android 线程交互

    在Android开发过程中,耗时操作是不允许写在主线程(UI线程)中的,以免由于等待时间过长而发生ANR.所以耗时操作需要创建子线程来完成,然而往往这些操作都需要与主线程进行通讯交互(例如更新主线程的 ...

  2. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  3. Android线程管理之Thread使用总结

    前言 最近在一直准备总结一下Android上的线程管理,今天先来总结一下Thread使用. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Executo ...

  4. Android线程管理之ExecutorService线程池

    前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...

  5. Android线程管理之ThreadPoolExecutor自定义线程池

    前言: 上篇主要介绍了使用线程池的好处以及ExecutorService接口,然后学习了通过Executors工厂类生成满足不同需求的简单线程池,但是有时候我们需要相对复杂的线程池的时候就需要我们自己 ...

  6. Android线程管理之AsyncTask异步任务

    前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...

  7. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

  8. java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器

    多线程并发就像是内功,框架都像是外功,内功不足,外功也难得精要. 1.进程和线程的区别 一个程序至少有一个进程,一个进程至少有一个线程. 用工厂来比喻就是,一个工厂可以生产不同种类的产品,操作系统就是 ...

  9. Android线程管理(三)——Thread类的内部原理、休眠及唤醒

    线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...

随机推荐

  1. UVA 11384 Help is needed for Dexter(问题转化 递归)

    Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee ...

  2. UVA 11732 strcmp() Anyone?(Trie的性质)

    strcmp() Anyone? strcmp() is a library function in C/C++ which compares two strings. It takes two st ...

  3. sublime2 Ctags 快捷键

    Commands Listing Command Key Binding Alt Binding Mouse Binding rebuild_ctags ctrl+t, ctrl+r     navi ...

  4. 网络安全设备Bypass功能介绍及分析

    from:http://netsecurity.51cto.com/art/200910/159948.htm 网络安全平台厂商往往需要用到一项比较特殊的技术,那就是Bypass,那么到底什么是Byp ...

  5. 【转】oracle PLSQL常用方法汇总

    原文:http://www.cnblogs.com/luluping/archive/2010/03/10/1682885.html 在SQLPLUS下,实现中-英字符集转换alter session ...

  6. PL/SQL学习(五)异常处理

    原文参考:http://plsql-tutorial.com/ 组成: 1) 异常类型 2) 错误码 3) 错误信息   代码结构: DECLARE Declaration section BEGIN ...

  7. chgrp命令

    chgrp命令用于变更文件或目录的所属群组. 在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理.您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆 ...

  8. CakePHP采用model的save方法更新数据所需查询

    采用model的save方法更新数据所需查询 1. 验证时候要确认是update 或者 create,以便使用对应规则 public $validate = array( 'field_name' = ...

  9. hadoop1中hdfs原理详解

    HDFS是Hadoop Distribute File System的简称,也是Hadoop的一个分布四文件系统 一.HDFS的主要设计理念 1.存储超大文件 这里的 “超大文件” 是指几百MB .G ...

  10. 回答了个问题,9x9 乘法表生成器

    # -*- coding: utf-8 -*- from prettytable import PrettyTable pt = PrettyTable() # 需要安装prettytable这个库来 ...