sp<xxxxxxxx>
Android中许多变量和函数返回值类型都是sp<xxxxxxx>类型,看起来很奇怪。sp是Android中定义的一个模板类,用于实现智能指针功能sp<IMediaPlayer>就是IMediaPlayer的智能指针,可以简单的把它看成时标准C++中的指针定义,即IMediaPlayer即可。
更详细解释参见:http://wangjun-1985.spaces.live.com/blog/cns!E9070276AAF56C8E!472.entry
Eclipse打开现有工程(添加workspace中的工程到Eclipse中)
File --> Import -->
Existing Projects into Workspace
--> next
-->选择工程路径 --> 添加
OK :)
Android 应用程序的安装与启动
Android系统中的每一个应用程序在安装的过程中都会事先在Android框架中注册登记这个应用程序所建立的Activity,并事先注明会使用到的Service。在执行'Start Activity'动作时,应用程序并不是直接呼叫Activity,而是将'Intent'(意图)传进Android框架中, Android框架会查看'Start Activity'呼叫所传入的动作与Intent内容是否在注册表中,如果符合,就启动对应的Activity或者Service。
intent-fliter的含义
<intent-filter>
<action android:name="android.intent.action.MAIN" />
//表示这个Activity是该应用程序的进入点,即启动这个应用程序时,先执行这个Activity
<category android:name="android.intent.category.LAUNCHER" />
// 表示这个Activity将显示在Launcher的应用程序列表中
</intent-filter>
Android数据库中Cursor的作用
Cursor是数据库中每一行的集合;使用moveToFirst定位第一行;是一个随机的数据源,所有的数据都是通过下标获得。
Android中编译单一模块
1)在myandroid下直接make libadd(libadd为目标模块名称);
2)在该模块的路径下,如libadd/下运行mm命令,注意,运行mm命令之前需先在myandroid下执行.空格/envsetup.sh
JAVA 中for循环的冒号表达式
String[] names = {"BadBoy","GoodBoy","HappyGril","SadGril"};
for(String option : names){
System.out.println(option);
}
程序会依次打印出字符串里的所有字符串;
p { margin-bottom: 0.21cm; }
Android 模拟器 (emulator) 调试信息的输出
在启动 emulator 时使用 -logcat 选项
$:emulator -help-logcat
use '-logcat <tags>' to redirect log messages from the emulated system to the current terminal. <tags> is a list of space/comma-separated log filters where each filter has the following format:
<componentName>:<logLevel>// emulator -avd avd-cy -logcat '*:v'
where <componentName> is either '*' or the name of a given component, and <logLevel> is one of the following letters:
v : verbose level
// 不过滤输出所有调试信息 包括 VERBOSE 、 DEBUG 、 INFO 、 WARN 、 ERROR
d : debug level
// debug 过滤器,输出 DEBUG 、 INFO 、 WARN 、 ERROR 调试信息
i : informative log level
// info 过滤器,输出 INFO 、 WARN 、 ERROR 调试信息
w : warning log level
// waring 过滤器,输出 WARN 和 ERROR 调试信息
e : error log level
// error 过滤器,只输出 ERROR 调试信息
s : silent log level
// 默认设置过滤器
for example, the following only displays messages from the 'GSM' component that are at least at the informative level:
-logcat '*:s GSM:i'
if '-logcat <tags>' is not used, the emulator looks for ANDROID_LOG_TAGS in the environment. if it is defined, its value must match the <tags> format and will be used to redirect log messages to the terminal.
note that this doesn't prevent you from redirecting the same, or other, log messages through the ADB or DDMS tools too.
p { margin-bottom: 0.21cm; }
将自己编译的 system.img 移植到模拟器上
a) 编译 android ,所需的 system.img 在 ~/out/target/product/generic 目录下
b) 将 a) 中的 system.img 拷贝到 sdk 的 ~/platforms/android-1.6/images 目录下覆盖原来的 system.img
c) 在 sdk 文件夹的 ~/tools 目录下创建 sdcard
$:mksdcard 512M ~/tools/sdcard1.img
d) 执行 android 命令,在弹出的图形用户界面创建一个新的 avd ,并于 c) 中的 sdcard 绑定
e) $:emulator -avd avd -partition-size 128 -shell
p { margin-bottom: 0.21cm; }
Android 模拟器镜像文件介绍 ( 原文地址: http://brumby007.ycool.com/post.3309233.html)
p { margin-bottom: 0.21cm; }
a. Android 模拟器采用的是开源工程 Qemu , Qemu 是 Linux 下的著名模拟器
b. kernel-qemu 是内核镜像
c. ramdisk.img 是文件系统,如果你自己编译了 android 的源代码,它的内容为 out/debug/target/product/generic /root , mount 到 android 的 /
d. system.img 主要存放系统数据, android 启动后 mount 到 /system 它包含的内容为 out/debug/target/product/generic/system
e. 一般来说我们不直接使用 userdata.img ,而是使用 userdata_qemu.data ,用来存放用户数据,可读写, android 启动后 mount 到 /data 。只有使用 -wipe-data 参数启动模拟器是时候才会用到 userdata.img ,它会使用 userdata.img 的内容覆盖 userdata-qemu.img
userdata.img 的内容为 out/debug/target/product/generic/system
f. 如果您没有编译 android 的源代码,我们也可以知道 ramdisk.img 、 system.img 和 userdata.img 的内容。
1). 查看 ramdisk.img 内容
terminal 中进入 sdk 的 images 目录,执行 file *
我看可以看到 ramdisk是一个 gzip文件,我们可以解压这个 gzip文件,解压前先备份一下
然后在 terminal中运行
localhost:images wuvincent$ gzip -d -S .img ramdisk.img
然后运行
localhost:images wuvincent$ file ramdisk
执行后会显示这个文件是一个 cpio文件,于是我们可以把它解压到一个目录下,依次执行如下命令
localhost:images wuvincent$ mkdir ramdiskdir
localhost:images wuvincent$ cd ramdiskdir
localhost:ramdiskdir wuvincent$ cpio -idmv <../ramdisk
我们就可以进入 ramdiskdir看到 ramdisk.img的内容了。
其中最主要的几个文件时 init init.rc init.goldfish.rc
2). 查看 system.img和 userdata-qemu.img內容
terminal中進入 sdk的 tools目錄下運行 adb shell
localhost:tools wuvincent$ adb shell
adb server is out of date. killing...
* daemon started successfully *
#
然後運行 cd /和 ls -l,執行結果如下:
我們可以看到 ramdisk.img mount到 /, init init.rc init.goldfish.rc都在 /目錄下。
而 /system就是 system.img mount後的目錄, /data 就是 userdata-qemu.img mount後的目錄,大家可以進入看看內容。
Android中隐藏标题栏和状态栏
1)
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏
注:这两句需加在onCreate()中setContentView(R.layout.main)函数前
2)
修改AndroidManifest.xml,在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"//去掉所有Activity界面的标题栏
3)
修改AndroidManifest.xml,在application 标签中添加android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //去掉所有Activity界面的TitleBar 和StatusBar
4)
//去掉状态栏,在setcontentview()之前
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//去掉标题栏,在setcontentview()之前
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
5)
支持全屏显示,放在AndroidManifest.xml中
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true"/>
JAVA中Static的作用
如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。可以将方法和变量都声明为static,声明为static的方法有以下几条限制:
1)仅能调用其它的static方法;
2)只能访问static数据;
3) 不能以任何方式引用this或super;
声明为static的变量实际上是全局变量,当声明一个对象时,并不产生static变量的拷贝,而是该类的所有实例变量共用同一个static变量。
Android Context
Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的 实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要 有Android特有的几个模型,Activity、Service以及BroadcastReceiver。
常规需要Context实例的方法主要有各种Service实现的类,比如说SensorManager在实例化时需要 getSystemService(String)方法就必须由Context的实例执行,还有一些私有的文件系统I/O比如说 openFileInput以及常用的Toast的makeText方法。