unit1
Andy Rubin
Windows Mobile/Phone C#,C++
IOS Objective-C
Symbian C++
BlackBerry java
Android C,C++,java
Jelly Bean 4.1/4.2
KitKat 4.4
Linux
安全性
内存管理
进程管理
网络协议栈
驱动模型
Libary/java running environment C/C++ java
BSDC libc embedded linux
PacketVideoOpenCode
SurfaceManager
LibWebCore
SGL
3Dlibraries
FreeType
SQLite
Dalvik
application procedure frame java
View
ContentProviders
ResourceManager
NotificationManager
ActivityManager
application procedure java
SMS
JDK->Eclipse->SDK->ADT
Android HelloWorld
createproject
writecode
createAVD
runningHelloWorld
Android应用程序框架
src
gen
asserts
bin
libs
res
AndroidManifest.xml
常用的开发与调试工具
Emulator
adb
DDMS
LogCat
AVDManager
SDKManager
四大组件
Activity
Service
BroadcastReceiver
ContentProvider
Manifest.xml
manifest
uses-permission
permission
instrumentation
application
activity
receiver
service
provider
unit 2
Activity
onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()
横竖屏切换的生命周期
android:configChanges
android:configChanges="orientation"
android:configChanges="orientation|keyboardHidden"
onConfigurationChanged()
四种基本状态
Running
Paused
Stopped
Destroyed
Intent intent = newIntent(this,NewActivity.class);
this.startActivity(intent);
this.startActivity(Intent[]);
startActivityForResult(Intent intent,intRequestCode);
onActivityResult(intrequestCode,int resultCode,Intent data){}
四种启动模式
standard
singleTop
singleTask
singleInstance
如何退出Acivity
finish()
killProcess()
system.exit()
Force Close
Record opened Activity
broadcast
startActivityForResult
定义Activity基类
Activity Manager
Task
BackStack
savedInstanceState
Intent
ComponentName
Action
Data
Category
Extra
Flag
Activity
Service
BroadcstReceiver
IntentFilter
unit 3
View
TextView
EditText
Button
CheckBox
setOnCheckedChangeListener()
RadioButton
RadioGroup
setOnCheckedChangeListener()
ToggleButton
Switch
ImageView
DigitalClock
TextClock
CheckedTextView
Chronometer
ViewGroup
Android UI
LinearLayout
android:orientation="vertical"
android:layout_weight="1"
android:gravity
android:layout_gravity
RelativeLayout
android:layout_below="@id/aaa"
android:layout_toLeftOf="@id/bbb"
android:layout_alignParentLeft="true"
TableLayout
FrameLayout
AbsoluteLayout
Spring
Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());
setOnItemSelectedListener()
SeekBar
setOnSeekBarChangeListener()
Menu
onCreatOptionMenu(Menu menu)
Menu.add()
ProgressDialog
padding
margin
unit 4
Adapterview
*ListView
ListAdapter
Model------List或数组
View-------ListView
Control----Adapter
Recycler
getCount()
getItem()
getItemId()
getView()
View
convertView null
convertView item1
return convertView
AbsSpinner
Gllery
Spinner
AbsListView
GridView
自定义adapter
adapter
ArrayAdapter
SimpleAdapter
自定义adapter
SimpleCursorAdapter
unit 5
Dialog
AlertDialog
静态内部类Builder create()
show()
ProgressDialog
DatePickerDialog
TimePickerDialog
Menu
OptionsMenu
SubMenu
ContextMenu
Toast
Toast.makeText(this,"Toast信息",Toast.LENGTH_SHORT).show();
Notification
NotificationManager
notify(int,Notification)
TabHost
TabActivity
TabHost
res/values/style.xml
<resources>
<style name="btn">
<item>
Selector
style
Theme
unit 6
SharedPrederences
getSharedPreferences()
getPreferences()
<key,value>xml
内部存储
openFileInput()
FileInputStream
read()
close()
外部存储
ContentProvider
ContentResolver
SQLite数据库
dictionary.db apk
adictionary.db->Eclipseandroid res aw
网络存储
将数据通过网络存储到远程
Socket(TCP/UDP)
HTTP
get
put
post
delete
两种方式通过不同的协议向目标段发送获取数据获取数据的请求
应用程序通过ContentResolver对象访问ContentProvider提供的数据
Create
retrieve
update
delete
如何打开res aw目录中的数据库文件
第一次启动时将文件复制到手机内存或SD卡的某个目录中
getResources().openRawResource InputStream
SQLiteDatabase.openOrCreateDatabase打开任意目录中的SQLite数据库文件
unit 7
Service
noface
priorityhigher than Activity
autoretrieve
IPC(Inter Process Communication)
两种使用方式
StartedService
BoundService
三个生命周期
onCreate()
onStart()
onDestroy()
绑定式Service的五个特点
Connection或直接获取Service中状态和数据信息
链接后,获取到Service对象
Context.bindService()建立服务链接 Context.unbindService()停止服务链接
Context.bindService()auto start
同一个Service可以绑定多个服务链接,这样同时为对各不同的组件提供服务
Context.startService()
一般会把在应用程序被关闭后任然需要执行的操作实现为一个启动时的Service
onCreate()
onStart()
-----startService()
onStart()
Context.stopService()
onDestroy()
Context.bindService()
将一些执行特定功能,执行周期短或在应用程序关闭后将要停止的操作实现为绑定式Service
onCreate()
onBind()
onUnbind()
onDestroy()
-----bindService()
unbindService()
onUnbind()
onDestroy()
ServiceConnectionconn = new ServiceConnection()
bindService(intentconn,Context.BIND_UTO_CREATE);
BroadcastReceiver
registerReceiver() 动态注册常驻型广播
AndroidManifest.xml
voidonReceive(Context curContext, Intent BroadcasstMsg)
AIDL(Android Interface Definition Language)
NDK(Native Development Kit)
unit 8
Android five process
Foregroundprocess
Visibleprocess
Serviceprocess
Backgroondprocess
Emptyprocess
更新UI
使其他线程尝试访问UI线程,并委托后者更新UI
在线程间进行通信,让想更新UI的其它线程给UI线程发送消息,UI线程根据消息更新UI
使用Android提供的AsyncTask
Message
MessageQueue
Handler
Messageand Runnable
Looper
MessageExchange
Process
进程是操作系统结构的额基础,是计算机中正在运行的程序实力,他可以被分配给处理机并被处理机执行。通俗的说
,就是一个正在运行的ingyong程序尸体
Thread
线程是进程中某个单一顺序的控制流,他也被称为轻量级进程,他是处理调度的基本单位
unit 9
HTTP
HttpClient
HttpURLConnection
openConnect() create URLConnection andHttpURLConnection
connection.setDoOutput(true);
connection.setRequestMethod("GET");
connect()
get
2KB
post
IIS4 80KB
IIS5 100KB
Socket
TCPSocket(传输控制协议)
UDPSocket(用户数据报协议)
ConnectivityManager
Session
Cookie
unit 10
MeidaPlayer
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>
MediaPlayer.setScreenOnWhilePlaying()
MediaPlayer.setWakeMode()
AudioManager
OpenCore
OSCL(OperationSystem Compatibility Library)
PVMF(PacketVideoMultimedia Framework)
PVPlayerEngine
PVAuthorEngine
ContentResolver
MediaPlayer
setDataSource
SurfaceView
MediaPlayer.setDisplay(FurfaceHoldersh)
Camera
MediaRecorder
setAudioSource()
MediaRecorder.AudioSource.MIC
setAudioEncoder()
prepare()
start()
stop()
MediaRecorder.release()
自定义View
onMeasure(intwidthMeasureSpec, int heightMeasureSpec)
setMeasuredDimension(intwidth, int height)
View
SurfaceView
GLSurfaceView
openGL
Canvas
Paint
Bitmap
BitmapFactory
Drawable
Resources
Matrix
ViewFlipper
ViewPager
OpenGL
2D,3D
ViewAnimator
Frame
Tween
1、.apk扩展名
23、JNI:java本地编程接口,是 Java Native Interface 的英文缩写。他能够使java代码与用其他编程语言编写的应用程序和库进行互操作。(其他编程语言大多是c,c++和汇编语言。)
24、URIs
1.apk扩展名
apk是Android包的扩展名,一个Android包包含了与某个Android应用程序相关的所有文件,apk文件将AndroidManifest.xml文件、应用程序代码(dex文件)、资源文件和其他文件组成一个压缩包,一个项目只能打包压缩成一个apk文件。
2..dex扩展名
Android的程序被编译成.dex(Dalvik Executable)格式文件, 然后再进行打包生成可被直接安装的apk文件。
3.应用程序(APP)
一个或多个Activity、服务、监听和Intent接收器的集合,一个应用程序有一个文件清单,并且打包成一个apk文件。
3.Action
对Intent发送器意图的描述,一个活动是一个指派给Intent的字符串值。活动字符串可以由Android定义,也可以由第三方开发者定义。例如,在网页URL中使用的android.intent.action.VIEW或者在用户应用程序中使用的 com.example.rumbler.SHAKE_PHONE来使电话震动。
4.ADB( Android Debug Bridge )
SDK自带的一个基于命令行的调试程序。它提供了设备浏览工具、设备上的拷贝工具和为调试转寄端口的功能。更多信息请参考附录三(Android的ADB工具使用)。
5.内容源
内容源是建立在类ContentProvider之上的用于处理指定格式的内容请求字符串,并返回指定格式的数据的类。关于内容源的使用信息请参考本书第7章内容。
6.Dalvik Android
虚拟机的名字,Dalvik虚拟机是一个只能解释执行dex文件的虚拟机,dex文件针对存储性能和内存管理进行了优化。 Dalvik虚拟机是基于寄存器的虚拟机,并且能够运行经过Dalvik自带的“dx”工具转换过的Java类。 虚拟机运行在兼容Posix的操作系统上,依赖于底层的功能(如线程和低级内存管理)。Dalvik的核心类库有意做得与Java标准版非常类似,但它明显更适合小型移动设备。
7.DDMS
调试监视服务(Dalvik Debug Monitor ServiceDalvik)是SDK自带的一个可视的调试工具。它提供了屏幕捕捉、日志存储和进程检测能力。
8.Drawable
编译过的可视化资源,可以用来做背景、标题或屏幕的其他部分。它被编译在android.graphics.drawable子类中。
9.意图(Intent)
意图是一个Intent类,它包含很多描述调用者意图做什么的字段。调用者发送意图到Android意图处理器,意图处理器会遍历所有应用程序的意图过滤器来查找与该意图最匹配的Activity。意图字段包括渴望的动作、种类、数据、数据的MIME类型、一个处理类和其他约束。
10.意图过滤器(intent-filter)
Activity和意图接收器(Receiver)在它们的文件清单中包含一个或多个过滤器,用来描述什么类型的意图或者信息是它们能处理或想接收的。一个意图过滤器列出了一系列要求,例如,意图或信息必须满足的数据类型、被请求的动作和URI的格式。 对于Activity,Android搜索意图和Activity过滤器匹配程度最高的Activity;对于消息,Android会将消息转发给所有匹配意图过滤器的接收器。
11.Intent接收器(Receiver)
一个监听是由Context.broadcastIntent()发出的信息广播的类,详细信息请参考本书第9章。
12.布局资源
一个描述Activity屏幕布局的XML文件。
13.文件清单
应用程序中的一个XML文件,用于描述包中多个Activity、Intent过滤器、服务和其他内容。可以打开AndroidManifest.xml查看其包含的内容。
14.Nine-patch / 9-patch / Ninepatch image
一种可变尺寸的位图资源,可用作设备上的背景或其他图片。
15.资源
用户提供的XML、位图或其他文件,构建程序时会导入进来,稍后会被代码加载,Android支持多种类型的资源,请参考Resources中的详细描述,程序定义的资源文件应当保存在res/ 子目录下。
16.服务(Service)
运行在后台执行多种固定任务的类,如播放音乐或检测网络活动。
17.主题(Theme)
一系列定义多种默认显示设置的参数(文字大小、背景颜色等)。Android在R.style中提供了几个标准的主题(以"Theme_"开头)。
18.URIs
Android使用URI字符串请求数据(如通信录列表)和动作(如在浏览器中打开网页)。URI字符串可以具有不同的格式。所有请求数据的URI必须以“content://”开头。有效的动作URI字符串会被设备上的适当的程序处理,例如,以“ http://”开头的URI字符串会被浏览器处理
Android的源代码结构分为三部分:
1,核心工程:是建立android系统的基础,在根目录下的若干文件夹。
bionic:C运行时支持库。
bootable:boot loader参考代码。
build:Build系统。
dalvik:虚拟机。
development:高层的开发和调试工具。
frameworks/base:核心框架库。
frameworks/policies:框架配置策略。
hardware:硬件抽象层。
prebuilt:对一些系统平台的二进制支持。
system:环境和一些配置工具及组件。
2,扩展工程:external project目录。在external文件夹中。
3,包:Package目录,提供android 的应用程序和服务。系统应用程序在apps目录下,内容提供器在providers目录下。其中, launcher.apk是android的主屏幕,也就是启动后的第一个显示界面。
- APK: AndroidPackage的缩写,即Android安装包(apk)。
- JNI:JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
- Native 代码:Native代码主要是C或者C++的。代码编写者可以使用JNI从Java的程序中调用Native代码。
- NDK: Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。
- ADT: Eclipse 平台下用来开发 Android 应用程序的插件。
- binder: Binder是Android系统进程间通信(IPC)方式之一。
- ServiceManager: servicemanager是一个守护进程,用于管理系统中各个服务。
- zygote:zygote翻译成中文是受精卵的意思。zygote是一个native应用程序。在android中,大部分的应用程序进程都是由zygote来创建的,为什么用大部分,因为还有一些进程比如系统引导进程、init进程等不是有zygote创建的。相反,zygote还是在init进程之后才被创建的。
- Surface:中文意思表面。surface专门用来处理屏幕排版器(screen compositor)管理的一块内存,这块内存是用来直接绘制到屏幕的。
4.1 Context(中央控制中心)
作用:管理应用程序特定的配置细节,以及应用程序范围的操作和数据,使用Context来访问设置资源可以在多个Activity实例中实现共享。
获取:Context context = getApplicationContext();
使用: 1. 通过getResources()方法来获取资源实例
2. 访问应用程序首选项,经常用来存放配置
3. 访问其他应用程序的功能
1)运行Activity实例
2)获取应用程序所带组件(asset)
3)获取一个系统服务
4)管理私有的应用程序文件、目录和数据库
5)检查和使用应用程序权限
注意:Activity继承自Context,所以有时也可以替代对应应用程序Context的显示获取。但是,并不是所有的情况下都可以使用ActivityContext的,有可能会导致内存溢出。例如:我们经常使用Context传递参数的时候,都是用Activity的this实例来传递,这种情况传递过多会出现内存溢出,解决方法就是使用getApplicationContext()来获取Context传递过去。
4.2 Activity
作用:任何一个Android应用程序的核心组成部分
生命周期:并不是每个Activity都是在当前活动可见的,每个应用程序在被用户使用的过程中,只有一个Activity是当前用户可见并可操作的(即获取到焦点的)。而一旦开启另一个活动Activity,那么之前的那个Activity就会被Android操作系统自动处理,压入Activity栈中。而这个新压入的栈完成工作后,则会被从栈顶移除。而之前的Activity又会回到栈顶,成为活动Activity。
图4.2.1 Activity生命周期内的一些列回调
回调函数的调用时机和调用目的:
回调函数
描述
调用时机
调用目的
onCreate()
初始化静态
Activity
一个Activity首次运行的时候调用
仅有一个参数,Bundle对象。对于首次运行的Activity来说为空。如因内存原因被终止的Activity则Bundle包含之前的Activity状态信息。用来尽心数据绑定。
onResume()
初始化和接受Activity数据
Activity为前台进程的时候调用
获取Activity运行所需资源。适合于启动音频、视频和动画。
onPause()
停止、保存和释放Activity数据
Activity接受到在栈中被下移的通知
终止在onResume中播放的所有音频、视频和动画。同时,必须接触某些资源,例如数据库。保存未提交的数据,这是Activity在后台的最后一个机会能够做这些事情。
被销毁: 1. 在低内存下,Android会终止任何非活动Activity
2. onPause()被调用,则onStop()和onDestory()不会被调用
3. onPause()释放越多的资源,转入后台的Activity被终止可能行越小
4. 终止Activity不会从栈中移除,而是将其销毁钱状态存入Bundle。前提为Activity实现了它,并且使用了onSaveInstanceState()方法保存自定义数据。
避免被销毁:1. 使用onSaveInstanceState()将Acitvity状态存储至Bundle对象
注释:该方法不一定会生效,所以对于关键数据最好在onPause()中调用。至于返回这个状态,则只需要利用onRestoreInstanceState()方法调用Bundle中的信息即可。
2. 在onDestory()方法中保存数据
注释:Activity自然完成了它的生命周期,或者由于资源占用的原因被Android系统终止的时候调用onDestory(),这时候可以将未保存的数据保存下来。
Intent跳转:1. 只出现一次的跳转,例如启动动画
注释:startActivity()和finish()方法
2. 暂时性跳转,只是为了等待一个结果
注释:startActivityForResult()和onActivityResult()方法
跳转实现: 1. 使用类名运行
注释:显示调用Intent,譬如:
startActivity(newIntent
(getApplicationContext(),TestActivity.class))
2. 使用Action
注释:Uri number = Uri.parse(tel:11111);
Intentintent = new Intent(Intent.ACTION_DIAL, number);
startActivity(dial);
上述是调用系统电话功能
3. 传递信息
注释:使用Intent中的putExtra方法
注意:Android约定用于附加信息的键名必须包含一个包前缀
服务: 1. 没有用户界面的Activity
服务作用: 1. 天气、邮件等社交网络类。
2. 照片和多媒体应用,用于数据的同步
3. 视频编辑应用,添加繁琐的操作到服务,避免性能影响
4. 新闻预载入,提高性能
5. 经验规则:某个任务需要一个辅助线程,但可能会影响应用程序的响应性和性能,这个时候可以考虑使用服务来处理这一任务。
4.3 小结
Activity的一些重要概念。
本文详细介绍了Android开发中的关键概念,包括操作系统层面的Linux、Dalvik虚拟机、安全性、内存管理及进程管理;开发语言与平台如Java、C++、C#、Objective-C;UI组件如Activity、View、Intent;数据存储如SQLite、SharedPreferences;网络通信及多媒体处理;服务与广播Receiver;以及进程间通信IPC等。此外,还涵盖了各种工具的使用,如Emulator、ADB、DDMS等。

1150

被折叠的 条评论
为什么被折叠?



