首先这个睡眠是不一定的,a是固定睡眠的,但是不一定a睡完了b就立刻执行这存在着线程抢时间片的问题,是随机的而这个i呢,你定义好了是没错,但是每次拿来i+1的时候i都是一个新的,也就是说你的i+1只是当前方法中执行了,并没有去影响到成员变量i
R r=new R(); 没有必要,等于每个R对象运行时就会产生一个新的R对象,好在你没让它运行起来。否则内存递推很快就满了。
talentwei8899说的对,直接使用ThreadCurrentThreadsleep(1000);
休眠的是当前线程。
若想让进程休眠时间不同,休眠的时间可取个随机数。
sleep(毫秒数)是Thread类的静态方法。
使用时:Threadsleep(毫秒数);
如Threadsleep(1000);该线程睡眠1秒钟,之间此线程什么都不做。
等1秒钟之后,继续余下代码执行。
不过线程是没有保证的。也许1秒钟之后,该线程没有转为可运行状态,也是可能的。
唤醒:androidintentactionSCREEN_ON (代码)
休眠:androidintentactionSCREEN_OFF (代码)
android系统一段时间没有 *** 作,
屏幕(screen)将从高亮(bright)变为暗淡(dim),如果再过段时间还是没有 *** 作,屏幕(screen)从暗淡(dim)变为关闭(off)这时,系统将进入休眠
而对于某些需要保持系统唤醒甚至屏幕唤醒的应用(比如视频播放器和音乐播放器)来说,就必须要有一个机制,使得系统不进入休眠状态,设置保持屏幕亮屏状态
wakelock即用来实现以上目的
接下来对每一个模块具体分析:
powermanager
对应文件是android/frameworks/base/core/java/android/os/PowerManagerjava
在Android中应用程序并不是直接同PowerManagerService交互的,而是通过PowerManager间接地与PowerManagerService打交道。
此文件定义了一个powermanager类
主要实现了
1,wakelock的申请与释放
public WakeLock newWakeLock(int flags, String tag)
2,系统延时进入休眠
public void userActivity(long when, boolean noChangeLights)
3,系统强制休眠
public void goToSleep(long time)
4,屏幕亮度设置
public void setBacklightBrightness(int brightness)
5,屏幕状态查询
public boolean isScreenOn()
6,系统重启
public void reboot(String reason)
细节
wakelock的申请与释放
{@samplecode
PowerManager pm = (PowerManager)mContextgetSystemService(
ContextPOWER_SERVICE);
PowerManagerWakeLock wl = pmnewWakeLock(
PowerManagerSCREEN_DIM_WAKE_LOCK
| PowerManagerON_AFTER_RELEASE,
TAG);
wlacquire();
//
wlrelease();
一共有如下几个flag来进行不一样的唤醒方式可以根据需要设置
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On can-off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
PROXIMITY_SCREEN_OFF_WAKE_LOCK on 距离传感器时关闭 off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
ACQUIRE_CAUSES_WAKEUP 确保wakelock,主要用于视频播放器
ON_AFTER_RELEASE = 0x20000000 release后倒计时,关闭屏幕
userActivity的作用:
使系统从其他状态进入全部打开状态,比如从暗屏(dim)切换到亮屏,并重置倒计时计数器
public class A extends Thread {
private long times;
public setTimes(long times){
thistimes = times ;
}
public A(){}
//或者
// public A(long times){
// thistimes = times
// }
public void run{
dosomething
thissleep(times);
}
public static void main(String[] args) {
A a1 = new A(1000);
A a2 = new A();
a2setTimes = 2000;
A a3 = new A(3000);
a1start();
a2start();
a3start();
}
}
以上就是关于java线程睡眠问题全部的内容,包括:java线程睡眠问题、java如何用Runnable实现让这线程断断续续的休眠、Java线程中的sleep方法作用是啥,啥时候用此方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)