android 初始化类,Android 常用编程技巧/Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)...

这篇博客详细介绍了Android系统中如何控制屏幕亮度、保持背景灯常亮、使用通知管理器控制LED灯闪烁以及获取ROOT权限的方法。此外,还探讨了类的初始化顺序,包括静态变量、静态初始化块、变量和初始化块在继承情况下的初始化次序。
摘要由CSDN通过智能技术生成

1、设置屏幕的亮度:

WindowManager.LayoutParams

lp=getWindow().getAttributes();

lp.screenBrightness=1.0f;

getWindow().setAttributes(lp);

WindowManager.LayoutParams 的 screenBrightness 是一个 0 表示最暗,1

表示最亮的浮点数。

1.0f 表示 100%,屏幕背景灯开到最亮。

适用于 Android1.5 或以上版本。

2、背景灯常亮

android.os.PowerManager

android.os.PowerManager.WakeLock

http://hi.baidu.com/sunnyykn/blog/item/74532f089567cd326b60fb0d.html

View 类有以下XML属性:

android:keepScreenOn - boolean

3、控制LED灯

主要是用 android.app.NotificationManager 类

final int ID_LED=19871103;

NotificationManager

nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);

Notification notification = new Notification();

notification.ledARGB = 0xFFFFFF;

//这里是颜色,我们可以尝试改变,理论上0xFF0000是红色

notification.ledOnMS = 100;

notification.ledOffMS = 100;

notification.flags = Notification.FLAG_SHOW_LIGHTS;

nm.notify(ID_LED, notification);

nm.cancel(ID_LED);

4、让自己的程序获得ROOT权限

http://my.unix-center.net/~Simon_fu/?p=951

5、android 的音频架构(高手啊)

http://www.soomal.com/doc/10100002092.htm

http://www.360doc.com/content/10/1223/09/4525948_80586548.shtml

6、在Emulator上模拟来电效果

telnet

然后输入 o localhost 5554

输入gsm call 123456 上面显示OK

这时再去看模拟器,上面就有来电了.

---------------------------------------------------------------------------------------------

我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)

>

(变量、初始化块) >

构造器。我们也可以通过下面的测试代码来验证这一点:

Java 代码

public class InitialOrderTest {

// 静态变量

public static String staticField = " 静态变量 ";

// 变量

public String field = " 变量 ";

// 静态初始化块

static {

System.out.println(staticField);

System.out.println(" 静态初始化块 ");

}

// 初始化块

{

System.out.println(field);

System.out.println(" 初始化块 ");

}

// 构造器

public InitialOrderTest() {

System.out.println(" 构造器 ");

}

public static void main(String[] args) {

new InitialOrderTest();

}

} 运行以上代码,我们会得到如下的输出结果: 静态变量

静态初始化块

变量

初始化块

构造器

这与上文中说的完全符合。那么对于继承情况下又会怎样呢?我们仍然以一段测试代码来获取最终结果:

Java 代码

class Parent {

// 静态变量

public static String p_StaticField = " 父类 -- 静态变量 ";

// 变量

public String p_Field = " 父类 -- 变量 ";

// 静态初始化块

static {

System.out.println(p_StaticField);

System.out.println(" 父类 -- 静态初始化块 ");

}

// 初始化块

{

System.out.println(p_Field);

System.out.println(" 父类 -- 初始化块 ");

}

// 构造器

public Parent() {

System.out.println(" 父类 -- 构造器 ");

}

}

public class SubClass extends Parent {

// 静态变量

public static String s_StaticField = " 子类 -- 静态变量 ";

// 变量

public String s_Field = " 子类 -- 变量 ";

// 静态初始化块

static {

System.out.println(s_StaticField);

System.out.println(" 子类 -- 静态初始化块 ");

}

// 初始化块

{

System.out.println(s_Field);

System.out.println(" 子类 -- 初始化块 ");

}

// 构造器

public SubClass() {

System.out.println(" 子类 -- 构造器 ");

}

// 程序入口

public static void main(String[] args) {

new SubClass();

}

} 运行一下上面的代码,结果马上呈现在我们的眼前: 父类

--

静态变量 父类 -- 静态初始化块 子类 -- 静态变量 子类 -- 静态初始化块 父类 -- 变量 父类 -- 初始化块 父类 -- 构造器 子类 -- 变量 子类 -- 初始化块 子类 -- 构造器 现在,结果已经不言自明了。大家可能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初始化,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。

那么对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?是否静态变量总是先于静态初始化块,变量总是先于初始化块就被初始化了呢?实际上这取决于它们在类中出现的先后顺序。我们以静态变量和静态初始化块为例来进行说明。

同样,我们还是写一个类来进行测试: Java 代码

public class TestOrder {

// 静态变量

public static TestA a = new TestA();

// 静态初始化块

static {

System.out.println(" 静态初始化块 ");

}

// 静态变量

public static TestB b = new TestB();

public static void main(String[] args) {

new TestOrder();

}

}

class TestA {

public TestA() {

System.out.println("Test--A");

}

}

class TestB {

public TestB() {

System.out.println("Test--B");

}

} 运行上面的代码,会得到如下的结果: Test--A 静态初始化块 Test--B 大家可以随意改变变量 a 、变量 b 以及静态初始化块的前后位置,就会发现输出结果随着它们在类中出现的前后顺序而改变,这就说明静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,变量和初始化块也遵循这个规律。

了解了继承情况下类的初始化顺序之后,如何判断最终输出结果就迎刃而解了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值