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. java I/O技术

    一.流的分类 Java的流类大部分都是由InputStream.OutputStream.Reader和Writer这四个抽象类派生出来的 (1)按数据流向 输入流(InputStream类和Read ...

  2. 查看编译后的calss文件编译jdk版本

    使用UtralEdit或者sublime text打开编译后的.class文件, 其中cafe babe为magic number(魔数),标识这个文件是java的class文件. 0033转换成10 ...

  3. LevelDB windows vs2013 c++编译和测试

    引用: (src1) :http://download.csdn.net/detail/flyfish1986/8881263(这里有下载地址) (src2) :http://blog.csdn.ne ...

  4. 【CF492E】【数学】Vanya and Field

    Vanya decided to walk in the field of size n × n cells. The field contains m apple trees, the i-th a ...

  5. Range Minimum Query and Lowest Common Ancestor

    作者:danielp 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAnc ...

  6. 第一个wxWidgets程序

    wxWidgets的安装方法网上有一大堆,可以参照http://wiki.codeblocks.org/index.php?title=WxWindowsQuickRef 这里解压并编译 ,也可以参照 ...

  7. 高性能、高并发TCP服务器(多线程调用libevent)

    from:http://blog.csdn.net/i_am_jojo/article/details/7587838 本文讲述的TCP服务器是模仿memcache中的TCP网络处理框架,其中是基于l ...

  8. centos7.0安装docker报错

    使用centos7.0安装dockers时出现Transaction check error错误. yum install docker Transaction check error: file / ...

  9. POJ 3267 The Cow Lexicon 简单DP

    题目链接: http://poj.org/problem?id=3267 从后往前遍历,dp[i]表示第i个字符到最后一个字符删除的字符个数. 状态转移方程为: dp[i] = dp[i+1] + 1 ...

  10. tabbar - 取消系统渲染

    /**  1. 取消自动渲染 - 图片***/ viewCon1.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_home_ ...