当前位置:编程学习 > JAVA >>

Java(android) 程序暂停, Thread.sleep?

new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Log.i("aaa", "hello"); TelephonyManager tm = (TelephonyManager)getBaseContext() .getSystemService(Context.TELEPHONY_SERVICE); deviceid = tm.getDeviceId(); username = SysUtil.loginname; SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat stimeFormat = new SimpleDateFormat("HH:mm:ss"); date = sDateFormat.format(new java.util.Date()); time = stimeFormat.format(new java.util.Date()); //发送 message = username + "," + deviceid + "," + date + "," + time + "," + preferences.getString("longtitude", "fail") + "," + preferences.getString("latitude", "fail") + "," + preferences.getString("accelerator", "fail,fail,fail") + "," + preferences.getString("magnetic", "fail,fail,fail") + "," + preferences.getString("pressure", "0") + "," + preferences.getString("light", "0") + "," + preferences.getString("wifi", "fail,fail,fail"); try { String s = SysUtil.client.sendMessage(message); if(s.equals("fail")) { editor.putString("last" + SysUtil.cur++, message); editor.commit(); } if(s.equals("login")) { SysUtil.pushlogin(getApplicationContext()); editor.putString("last" + SysUtil.cur++, message); editor.commit(); } if(s.equals("success")) { SysUtil.cur--; for(; SysUtil.cur > 0; SysUtil.cur--) { preferences.getString("last" + SysUtil.cur, message); s = SysUtil.client.sendMessage(message); if(!s.equals("success")) break; } } } catch (Exception e) { // TODO Auto-generated catch block editor.putString("last" + SysUtil.cur++, message); editor.commit(); } } }, 0, SysUtil.frequncy * 300); } 目前我是用Timer来实现每隔一段时间执行一次run()里面的程序 但是后来功能需要,发现要动态的改变间隔时间,这一点上timer好像不能实现。 后来改成了while(true)循环里面加Thread.sleep(/*间隔时间*/),try/catch异常 发现应用好像陷入了死循环,至少,程序总是无响应无响应的。 求助!
追问:其实就是不愿用线程,没想到Timer不允许改period。
现在看来还是用线程比较方便
答案:我觉得吧
你暂停的时候应该吧TIMER.CANCEL()掉,也就是退出TIMER,等恢复的时候再重新调用TIMER
 
如果时间是变动的,那么你就不要用TIMER,自己NEW 一个THREAD然后在THREAD里设置一个标志变量,可以再外面访问的,用它来控制线程的退出,里面再调用this.sleep(),
 
不能再主线程里直接SLEEP,那样程序会全停掉
其他:像这类定时的工作android上建议使用AlarmManager,里面可以完成timer的所有功能,而且更简单 

上一个:怎样实现监视键盘和鼠标的java后台程序
下一个:我把小数保存为字符串类型,怎么在java中遍历出来时,凡是小数点前的0都不见了,帮帮忙好

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,