admin 管理员组

文章数量: 887032


2023年12月25日发(作者:说法)

1、Android体系结构

Android是基于Linux内核的软件平台和操作系统,采用了软件堆栈的架构,共分为4层:第一层是Linux内核,提供由操作系统内核管理的底层基础功能;第二层是中间件层,由函数库和Android运行时构成;第三层是应用程序框架层,提供了Android平台基本的管理功能和组件重用机制;第四层是应用程序层,提供了一系列核心应用程序。

2、Dalvik虚拟机基于寄存器的Java虚拟机,每个应用程序在一个独立的Dalvik虚拟机上运行

3、.apk(Android Package)文件,该文件实际上是个压缩包,可改为.zip解压缩

4、Android两种开发环境:JDK + Eclipse + ADT + Android SDK

JDK + Android Studio + Android SDK

5、14:Min SDK Version最低SDK版本

22:Target SDK Version目标SDK版本

22:Compile SDK Version编译的SDK版本

6、adb:Android Debug Bridge,连接PC与Android设备的桥梁

adb connect 127.0.0.1:6555

查看设备:adb devices

安装软件:adb install

卸载软件:命令1:adb uninstall <软件名>

命令2:adb uninstall -k <软件名>

登录设备shell:命令1:adb shell

命令2:adb shell

从计算机上发送文件到目标机:adb push <本地路径> <远程路径>

从目标机上下载文件到计算机:adb pull <远程路径> <本地路径>

显示帮助信息:adb help

7、Android项目目录:(代码与资源分开)

src 源代码目录

gen 目录(文件是ADT自动生成,不能手动修改,作用:

src中的代码通过访问res中的资源)

res 资源目录(/res/layout/目录:界面布局文件,xml;/res/raw不参加编译的资源,不能生成对应文件)

清单文件(声明应用程序属性信息,声明组件,声明权限,唯一一个组件BroadcastReceiver不需在AndroidManifest中注册)

8、四大组件:Activity,Service,BroadcastReceiver,ContentProvider,前3个组件的组件之间的通信由Intent实现,另一app需通过ContentResolver来与ContentProvider通信。

Activity是app的表示层,作用:与用户交互,显示信息;Service用于无用户界面,但需长时间在后台运行的应用;BroadcastReceiver监听系统广播、其它应用程序广播、其它组件广播,并响应广播消息;ContentProvider用于进程间共享数据。

9、声明权限以访问其他功能:

10、setContentView(UI控件),所有UI控件都继承自View类,View类有一个非常重要的子类:ViewGroup(容器)

ViewGroup(容器)

界面布局 AdapterView(与Adapter配套使用,Adapter提供控件和资源)

ArrayAdapter只能处理列表项内容全是文本的情况

Adapter子类

SimpleAdapter不仅可以处理列表项全是文本的情况,当列表项中还有其他控件时,同样可以处理

setAdapter

具体UI控件有哪些:TextView、EditText、Button、ImageButton、CheckBox、RadioButton、Spinner、ListView和TableHost。

界面布局属性取值:

线性布局---LinearLayout: android:layout_width

android:layout_height

android:orientation

表格布局---TableLayout: android: collapseColumns

android: shrinkColumns

android: stretchColumns

相对布局---RelativeLayout: android:layout_centerHrizontal

android:layout_centerVertical android:layout_centerInparent

android:layout_alignParentBottom android:layout_alignParentLeft

android:layout_alignParentRight android:layout_alignParentTop

android:layout_alignWithParentIfMissing

android:layout_below android:layout_above

android:layout_toLeftOf android:layout_toRightOf

android:layout_alignTop android:layout_alignLeft

android:layout_alignBottom android:layout_alignRight

android:layout_marginBottom android:layout_marginLeft

android:layout_marginRight android:layout_marginTop

帧布局---FrameLayout

网格布局---GridLayout: android:columnCount和android:rowCount

android:layout_rowSpan

android:layout_columnSpan

绝对布局---AbsoluteLayout

11、不同设备显示兼容性——尺寸单位:dp;文字大小单位:sp

Patch9图片:控件拉伸变形

12、事件处理:监听器、onClick()

Activity的启动:

直接启动 :startActivity(Intent intent)

带返回值启动:startActivityForResult(Intent intent, int

requestCode)

Activity的停止:

finish ():结束当前Activity

finishActivity(int requestCode):结束以startActivityForResult(Intent intent, int requestCode)启动的Activity

启动的代码(实验3):

Intent intent = new Intent(, );

startActivity(intent);

Intent附加数据方法:ra()和Bundle

(1)Intent intent = new Intent(,

);

ra("string_key", "string_value");

startActivity(intent);

在MainActivity接收数据:

Intent intent=getIntent();

String keyvalue=ingExtra("string_key");

(2)Bundle bundle =new Bundle();

ing("string_key", "string_value");

ra("key", bundle);

startActivity(intent);

在MainActivity接收数据:

Intent intent =getIntent();

Bundle bundle =dleExtra("key");

String keyvalue=ing("string_key");

7个生命周期方法:

onCreate()、onStart()、onRestart()、onResume()、onPause()、onStop()、onDestroy()

生命周期状态图:

Activity4种状态:

运行状态:Activity位于前台,用户可见,获得焦点

暂停状态: Activity可见,但被其它Activity覆盖,没有获得焦点

停止状态:不可见,失去焦点

销毁状态:Activity结束,或所在进程被结束

Activity有4种启动模式,分别为standard、singleTop、singleTask和singleInstance

13、Handler、Looper、MessageQueue工作原理

Looper:每个线程只有一个Looper,负责管理MessageQueue,不断从MessageQueue中取出消息,并将消息分发给对应的Handler处理

MessageQueue:消息管理,由Looper负责管理

Handler:把消息发送给Looper管理的MessageQueue,并负责处理Looper分给它的消息

Looper

Handler MessageQueue

14、区别:

显式Intent(指定启动名称):

– 明确指出目标组件名称的Intent

– 告诉Android系统,我要“找谁”,Android平台将目标组件启动起来

– 常用于APP内部组件间启动

隐式Intent(满足条件):

– 不指名目标组件名称的Intent

– 告诉Android系统,我要“干什么”,Android平台将Intent请求与IntentFilter过滤器做比较,找出匹配Intent请求的组件,将其启动起来

– 常用于不同APP之间传递消息

16、Intent七大属性

– Component:明确指定目标组件名称 显式Intent

– Action:动作

– Category:类别 隐式Intent

– Data:向Action属性提供操作的数据

– Type:指定Data属性指定Uri对应的MIME类型

– Extra:携带数据

– Flag:控制旗标

IntentFilter过滤器:

一个隐式Intent与IntentFilter比较时,必须通过Action、Category和Data三个方面的检查,任一个不匹配,都不能启动该组件

如果一个组件没有定义,只能响应显式Intent请求

Intent添加Action只能一条(setAction)

Intent-Filter可以多条(addAction)

17、数据存储3种方式:简单存储、文件存储、数据库存储

少量数据需要保存,用文件即可

– SharedPreferences

– File存储在SD卡

大量数据需要存储

– SQLite数据库

SharedPreferences核心代码步骤:

获取SharedPreferences:

getSharedPreferences(String name, int mode)

• name: 文件名称

• mode: 打开方式

– MODE_PRIVATE:该数据只能被本应用程序读写

保存SharedPreferences:

获取Editor对象,通过SharedPreferences对象的edit()方法

调用Editor对象的putXXX()方法把数据以键值对的形式存放到SharedPreferences对象中

调用Editor对象的commit()方法来把数据保存到XML文件中

editor=();

ing(“volume”,”off”);

();

读取SharedPreferences:

getXXX(String Key, XXX defaultValue)

• Key:键

• defaultValue:如果Key不存在,则返回设置的默认值“defaultValue”

String volume=ing(“volume”);

文件存储:

内部存储:系统绝对路径”/data/data/<应用程序报名>/files/”

外部存储:SD卡路径”/sdcard”

SQLite数据库6个函数:execSQL()、rawQuery()、insert()、delete()、update()、query()

18、ContentProvider作用:应用程序间共享数据

一个应用程序需要把自己的数据暴露给其它app,则该应用程序提供ContentProvider来实现,另外的应用程序可通过ContentResolver来操作暴露出来的数据

配置注册ContentProvider:

android:name="MyContentProvider"

android:authorities="t"

android:exported="true"

/>

域名:authorities

19、Service的6个回调函数:onCreate()、onStartCommand()、onDestroy()、onBind()、onUnbind()、onRebind()

startService()、bindService()方式启动的Service,同一类的Service只存在一个对象。

Service与Activity的区别:

(1)Service一直在后台运行,没有用户界面,绝不会到前台来;

(2)Activity在前台运行,有用户界面,负责与用户交互。

所有创建Service 必须实现onBind(Intent intent)回调方法

Service两种启动方式:startService()和bindService(),Intent必须显示启动Service。startService() 对应的停止方式stopService(),bindService()

对应的停止方式unBindService()。

Service生命周期:

20、发送广播有3种方式:sendBroadcast()、sendOrderedBroadcast()、sendStickyBroadcast()。

BroadcastReceiver两种注册方式:静态注册、动态注册。静态注册在中注册,动态注册在代码中注册,取消注册该广播接收器

调用Context的unregisterReceiver(BroadcastReceiver receiver)。

21、Android支持的4种网络编程API:

– 基于TCP的网络通信

• ServerSocket, Socket

– 基于UDP的网络通信

• DatagramSocket, Datagrampacket, MulticastSocket

– 使用URL访问网络

• URLConnection

– 基于HTTP的网络通信

• HttpURLConnection, HttpClient (Apache)

Android中建立网络连接、读取网路数据不能在UI线程中。

HttpURLConnection 连接代码(GET请求):

HttpURLConnection conn = (HttpURLConnection)

nnection();

uestMethod(“GET”);

HttpURLConnection 断开代码:

nect()

两种数据解析方式:XML和JSON

22、定位方式GPS与网络定位优缺点比较

GPS定位

• 利用手机里的GPS芯片通过卫星获得自己的位置信息

• GPS在室内基本定位不到

• 耗时长,因为要搜索卫星,接收卫星星历等信息

• 耗电快

• 精度高,大约10米

网络定位

• 耗时短

• 耗电少

• 精度低,几十米到几百米不等

Android 网络定位:

– 基站

– Wi-Fi

– IP地址

23、Android平台下传感器类型及分类

– 按测量物理量分类(官方提供了13个):

• 加速度传感器(Accelerometer)

• 方向/姿态传感器(Orientation)

• 陀螺仪(Gyroscope)

• 距离/接近传感器(Proximity)

• 光传感器(Light)

• 温度传感器(Temperature)

• 磁场传感器(Magnetic Field)

• 重力传感器(Gravity)

• 线性加速度传感器(Linear Accelerometer)

• 旋转矢量传感器(Rotation Vector)

• 压力传感器(Pressure)

– 按类别分三大类:

• Motion Sensor 运动传感器

加速度,陀螺仪,重力,线性加速度,旋转矢量

• Environment Sensor 环境传感器

光,温度,压力,湿度

• Position Sensor 位置传感器

方向传感器(后被其它方法取代),磁场,距离

– 按数据来源分类:

• 基于硬件的传感器

加速度传感器,陀螺仪

• 基于软件的传感器

线性加速度,重力,旋转矢量(也有可能是基于硬件实现的)

24、签名的必要性(为什么)

(1)开发者的身份认证

其它开发者可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换

(2)保证信息传输的完整性

签名对于包中的每个文件进行处理,以此确保包中内容不被替换

(3)Android Market对软件的要求

签名的两种模式:调试模式(debug mode)和发布模式(release mode)。


本文标签: 数据 组件 文件 应用程序 传感器