Android学习笔记整理

Android学习笔记整理
Android学习笔记整理

Android开发学习笔记

小魏

CQU

Android是Google于2007年11月05日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。

底层以Linux内核工作为基础,由C语言开发,只提供基本功能;

中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。

最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。

(https://www.360docs.net/doc/9014093271.html,/index.php?title=Main_Page)

进行Android开发,首先要搭建开发环境。实验室为我们搭建的环境:

JAVA JDK 1.5 (C:\Program Files\Java\jdk1.5.0_11)

MyEclipse 6.5

ADT 0.9.7 (C:\android\ADT-0.9.7)

Android SDK-windows 1.6 (C:\android\android-sdk-windows-1.6_r1)

进行Android开发需要安装Android SDK. (使用Android SDK Manager 工具进行安装。实验室的电脑可以找到Manager的位置C:\android\android-sdk-windows-1.6_r1\SDK Manager.exe)安装之后还应在IDE中进行一定的配置。(实验室MyEclipse6.5也帮我们都配置好了。可以打开MyEclipse->Windows->Android SDK and AVD Manager查看)

Android开发系统主要集中在两种环境中,分别是基于Android SDK的开发和基于Android 源代码的开发。前者可以在Linux或者Windows两种环境中使用IDE完成,后者需要在Linux 环境中进行开发。

基于源代码Android的开发在获取所有源代码的基础上进行,可以开发Android应用程序,进行系统移植或者开发Android系统本身。

我们项目的开发主要还是机遇Android SDK 进行上层软件的开发,但蓝牙通信部分可能需要基于源代码的开发。所以对SDK及源码结构有个总体的了解是很有好处的。

我们可以浏览Android网站

C:\android\android-sdk-windows-1.6_r1\docs\reference\packages.html

使用Ctrl+F查找想要使用的关键字,会看到相应的简介

如查找“Bluetooth.”可以看到与蓝牙开发相关的API

package

android.bluetooth

Classes | Description

Provides classes that manage Bluetooth functionality, such as scanning for devices, connecting with devices, and managing data transfer between devices.

中文如下:

Android.bluetooth

提供了皆如扫描设备、连接设备以及对设备间的数据传输进行管理的类,这些类对蓝牙设备进行功能性管理。

蓝牙模块API提供的应用包括了:

●扫描其它蓝牙设备

●通过查询本地蓝牙适配器来匹配蓝牙设备

●建立RFCOMM(无线射频通信协议)的通道/端口

●从其他的蓝牙设备中连接到指定的端口

●传输数据到其他设备,或者从其他设备中接收数据

如需运用这些API来执行蓝牙通信,应用程序必须声明BLUETOOTH许可。对于皆如寻找设备请求等的一些附加功能,也同样需要BLUETOOTH_ADMIN许可。

如需要使用蓝牙API的更详细的指引,参看Bluetooth Dev Guide topic.

Classes

BluetoothAdapter代表本地的蓝牙适配器设备

BluetoothClass代表一个描述了设备通用特性和功能的蓝牙类

BluetoothClass.Device定义了所有设备类的常量

BluetoothClass.Device.Major定义了所有主要设备类的常量

BluetoothClass.Service定义了所有服务类的常量

BluetoothDevice代表一个远程的蓝牙设备

BluetoothServerSocket监听蓝牙服务的端口

BluetoothSocket一个双向连接的蓝牙端口

网上有很多热心Android API翻译的Android爱好者。目前已经如下部分

虽然是合作翻译,但翻译的很不错,而且每个章节都有相关的资料推荐!

实验室的电脑貌似没有安装源代码。在https://www.360docs.net/doc/9014093271.html,/可以下载

源码的目录结构大致如下

源码目录结构详解

Android 2.1

|-- Makefile

|-- bionic (bionic C库)包括一些Linux内核及汇编语言编译的头文件。。。很难读

|-- bootable (启动引导相关代码)一些驱动库还有工具镜像。。。也很难读

|-- build (存放系统编译规则及generic等基础开发包配置)有一些编译工具及脚本

|-- cts (Android兼容性测试套件标准)

|-- dalvik (dalvik JAVA虚拟机)

|-- development (应用程序开发相关)

|-- external (android使用的一些开源的模组)

|-- frameworks (核心框架——java及C++语言)

|-- hardware (部分厂家开源的硬解适配层HAL代码)

|-- out (编译完成后的代码输出与此目录)

|-- packages (应用程序包)

|-- prebuilt (x86和arm架构下预编译的一些资源)

|-- sdk (sdk及模拟器)

|-- system (底层文件系统库、应用及组件——C语言)

`-- vendor (厂商定制代码)

比较重要的两个目录development及external入下

development 目录(开发者需要的一些例程及工具)|-- apps (一些核心应用程序)

| |-- BluetoothDebug (蓝牙调试程序)

| |-- CustomLocale (自定义区域设置)

| |-- Development (开发)

| |-- Fallback (和语言相关的一个程序)

| |-- FontLab (字库)

| |-- GestureBuilder (手势动作)

| |-- NinePatchLab (?)

| |-- OBJViewer (OBJ查看器)

| |-- SdkSetup (SDK安装器)

| |-- SpareParts (高级设置)

| |-- Term (远程登录)

| `-- launchperf (?)

|-- build (编译脚本模板)

|-- cmds (有个monkey工具)

|-- data (配置数据)

|-- docs (文档)

|-- host (主机端USB驱动等)

|-- ide (集成开发环境)

|-- ndk (本地开发套件——c语言开发套件)|-- pdk (Plug Development Kit)

|-- samples (例程)

| |-- AliasActivity (?)

| |-- ApiDemos (API演示程序)

| |-- BluetoothChat (蓝牙聊天)

| |-- BrowserPlugin (浏览器插件)

| |-- BusinessCard (商业卡)

| |-- Compass (指南针)

| |-- ContactManager (联系人管理器)

| |-- CubeLiveWallpaper (动态壁纸的一个简单例程)

| |-- FixedGridLayout (像是布局)

| |-- GlobalTime (全球时间)

| |-- HelloActivity (Hello)

| |-- Home (Home)

| |-- JetBoy (jetBoy游戏)

| |-- LunarLander (貌似又是一个游戏)

| |-- MailSync (邮件同步)

| |-- MultiResolution (多分辨率)

| |-- MySampleRss (RSS)

| |-- NotePad (记事本)

| |-- RSSReader (RSS阅读器)

| |-- SearchableDictionary (目录搜索)

| |-- SimpleJNI (JNI例程)

| |-- SkeletonApp (空壳APP)

| |-- Snake (snake程序)

| |-- SoftKeyboard (软键盘)

| |-- Wiktionary (?维基)

| `-- WiktionarySimple(?维基例程)

|-- scripts (脚本)

|-- sdk (sdk配置)

|-- simulator (?模拟器)

|-- testrunner (?测试用)

`-- tools (一些工具)

external 目录

.

|-- aes (AES加密)

|-- apache-http (网页服务器)

|-- astl (ASTL (Android STL) is a slimmed-down version of the regular C++ STL.)|-- bison (自动生成语法分析器,将无关文法转换成C、C++)

|-- blktrace (blktrace is a block layer IO tracing mechanism)

|-- bluetooth (蓝牙相关、协议栈)

|-- bsdiff (diff工具)

|-- bzip2 (压缩工具)

|-- clearsilver (html模板系统)

|-- dbus (低延时、低开销、高可用性的IPC机制)

|-- dhcpcd (DHCP服务)

|-- dosfstools (DOS文件系统工具)

|-- dropbear (SSH2的server)

|-- e2fsprogs (EXT2文件系统工具)

|-- elfcopy (复制ELF的工具)

|-- elfutils (ELF工具)

|-- embunit (Embedded Unit Project)

|-- emma (java代码覆盖率统计工具)

|-- esd (Enlightened Sound Daemon,将多种音频流混合在一个设备上播放)

|-- expat (Expat is a stream-oriented XML parser.)

|-- fdlibm (FDLIBM (Freely Distributable LIBM))

|-- freetype (字体)

|-- fsck_msdos (dos文件系统检查工具)

|-- gdata (google的无线数据相关)

|-- genext2fs (genext2fs generates an ext2 filesystem as a normal (non-root) user)

|-- giflib (gif库)

|-- googleclient (google用户库)

|-- grub (This is GNU GRUB, the GRand Unified Bootloader.)

|-- gtest (Google C++ Testing Framework)

|-- icu4c (ICU(International Component for Unicode)在C/C++下的版本)

|-- ipsec-tools (This package provides a way to use the native IPsec functionality )

|-- iptables (防火墙)

|-- jdiff (generate a report describing the difference between two public Java APIs.)|-- jhead (jpeg头部信息工具)

|-- jpeg (jpeg库)

|-- junit (JUnit是一个Java语言的单元测试框架)

|-- kernel-headers (内核的一些头文件)

|-- libffi (libffi is a foreign function interface library.)

|-- libpcap (网络数据包捕获函数)

|-- libpng (png库)

|-- libxml2 (xml解析库)

|-- mtpd (一个命令)

|-- netcat (simple Unix utility which reads and writes dataacross network connections)|-- netperf (网络性能测量工具)

|-- neven (看代码和JNI相关)

|-- opencore (多媒体框架)

|-- openssl (SSL加密相关)

|-- openvpn (VPN开源库)

|-- oprofile (OProfile是Linux内核支持的一种性能分析机制。)

|-- ping (ping命令)

|-- ppp (pppd拨号命令,好像还没有chat)

|-- proguard (Java class file shrinker, optimizer, obfuscator, and preverifier)

|-- protobuf (a flexible, efficient, automated mechanism for serializing structured data)

|-- qemu (arm模拟器)

|-- safe-iop (functions for performing safe integer operations )

|-- skia (skia图形引擎)

|-- sonivox (sole MIDI solution for Google Android Mobile Phone Platform)

|-- speex (Speex编/解码API的使用(libspeex))

|-- sqlite (数据库)

|-- srec (Nuance 公司提供的开源连续非特定人语音识别)

|-- strace (trace工具)

|-- svox (Embedded Text-to-Speech)

|-- tagsoup (TagSoup是一个Java开发符合SAX的HTML解析器)

|-- tcpdump (抓TCP包的软件)

|-- tesseract (Tesseract Open Source OCR Engine.)

|-- tinyxml (TinyXml is a simple, small, C++ XML parser)

|-- tremor (I stream and file decoder provides an embeddable,integer-only library)

|-- webkit (浏览器核心)

|-- wpa_supplicant (无线网卡管理)

|-- xmlwriter (XML 编辑工具)

|-- yaffs2 (yaffs文件系统)

`-- zlib (a general purpose data compression library)

更多详细的源码目录结构参见https://www.360docs.net/doc/9014093271.html,/view/00101d2f0066f5335a8121cd.html

源码中掺杂了汇编、C、C++、Java语言,阅读还是有些吃力的,但一些程序实例基本都是Java的,且有详尽的注释,建议阅读。(安装SDK就有Samples.实验室的电脑

C:\android\android-sdk-windows-1.6_r1\platforms\android-1.6\samples目录下可以找到。与源码中development\samples下基本相同)

如运行贪食蛇的源码:

在MyEclipse中选择File->New->Android Project. 选择打开已存在的资源如下:

就可以将工程加载到IDE中,再通过Run as->Android Project可以在模拟器中运行工程。Snake工程结构如下:

Src下的java文件是我们主要要写的。

Gen下的R.java负责调用应用程序中的非代码资源,是ADT自动生成的,我们不用修改。Res主要存放资源文件(例如图片等)里面有个layout文件夹下有snake_layout.xml文件是用来编写页面布局。(Xml文件格式还是挺好读的,但注意的是标签的声明。)通过编写修改xml文件修改布局有点像写网页。我们可以通过GUI设计器可视化设计器DroidDraw来进行页面设计。(但这个可能要自己下载,我还没有试。。。)

AndroidManifest.xml是每个应用程序的根目录都会有的文件。它主要向Android操作系统描述程序所包括的组件,所实现的功能,能处理的数据,要请求的资源等等。类似web程序开发中的web.xml

除了贪食蛇,还有很多示例的demo.具体列表见

C:\android\android-sdk-windows-1.6_r1\docs\resources\samples\index.html

读Snake的源码。一开始就会看到Activity\View等。。。

Activity是Android很重要的内置对象。可以理解成C#中的Form.

而View的概念也很重要。我也解释不清楚,具体可见https://www.360docs.net/doc/9014093271.html,/archives/196 https://www.360docs.net/doc/9014093271.html,/index.php?title=%E5%BA%94%E7%94%A8%E7%A8%8B%E5%B A%8F

Android中除了内置对象Activity,还有Intents、Services以及Content Providers四个组件。

这是Android应用程序最重要的四个组件。

(其他三个因为我还没有读到,具体也不太清楚。这里有些参考资料

https://www.360docs.net/doc/9014093271.html,/blog/776761)

Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解

Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解 17_创建数据库与完成数据添删改查--------------------------------------1.SQLite介绍:最大特点是,无数据类型; 除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER n n 、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型 n n 只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不 n n 过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数n n 据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的 n n 字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。n n n 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段 n n 保存除整数以外的数据时,将会产生错误。 另外, SQLite 在解析CREATE TABLE 语句时, n n 会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略 name字段 n n 的类型信息: CREATE TABLE person (personid integer primary key autoincrement, name varchar n n (20)) SQLite可以解析大部分标准SQL语句,如:查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order byn n n 排序子句如:select * from person n n n n select * from person order by id desc n n n n select name from person group by name having count(*)>1 ---------------------------------------------------------------------------2.a.分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录n n select * from Account limit 5 offset 3 或者 select * from Account limit 3,5 n b.select * from Account limit 3,5,指的是跳过前面的3条记录,然后获取5条记录n c.select * from Account limit 3,5是select * from Account limit 5 offset 3语句 n n 的简写版 -------------------------------------------------------------------------------n 3.常用操作: a.插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person nn n n (name, age) values(‘传智’,3) b.更新语句:update 表名 set 字段名=值where 条件子句。如:update person set name=n n n n'credream ‘where id=10 c.删除语句:delete from 表名 where 条件子句。如:delete from person nwhere id=10 -------------------------------------------------------------------------------2.虽然无数据类型,但是建议加上,这样可以增加可读性,支持标准sql,oracle中的不行 ---------------------------------------------------3.获取添加记录后的自增长的ID值:select last_insert_rowid(); -----------------------------------------------------------4.在android中开发数据库应用: n a.创建数据库:以前在javaee时候,需要手工数据,但是android应用,需要运行在用户的 n n 手机上,所以,android应用,要有自动创建数据库功能,当第一次使用软件的时候 n n 就创建数据库----------------------------------------5.关于数据库自动创建的详细介绍: 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很 n n 多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出 n n 应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据 n n 表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机 n n 上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方 n n 式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我 n n 们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版 n n 本进行管理来实现前面提出的需求。n -----------------------------------------6.SQLite数据库添加,删除,改查操作 n A.创建数据库:SQLiteOpenHelper .getWritableDatabase ()或getReadableDatabase() n n 可以创建数据库7.创建完成以后可以使用SQLITE Expert软件打开生成的数据库n 可以看到除了生成的自己的需要的表之外,还生成了一张:android_metadata表: n 如果在sqlite中使用数据库一定会有一张android_metadata表,用来登记用户的 n 使用语言:zh_cn -----------------------------------------------------n b.数据库自动创建的过程及方法详细介绍: n n我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在 n n 很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建 n n 出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数n n 据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手 n n 机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工 n n 方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为n n 我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库n n 版本进行管理来实现前面提出的需求。n -------------------------------------------8.详细介绍: 为了实现对数据库版本进行管理,SQLiteOpenHelper类提供了两个重要的方法,分别是 n n onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, intn n n newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结n n 构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获n n 取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生 n n 成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用 n n ,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。 n n onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号, n n 而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数n n 据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为n n 了实现这一目的,可以把原来的数据库版本设置为2(有同学问设置为3行不行?当然可以,如 n n 果你愿意,设置为100也行),并且在onUpgrade()方法里面实现表结构的更新。当软件的版本 n n 升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后 n n 作出相应的表结构及数据更新。 getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的 n n SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库n n 的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就 n n 会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了 n n ,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。 ------------------------------------------------------------------------9.创建数据库的代码: n a.创建项目:DBSQLIte n b./DBSQLIte/src/com/credream/service/DBOpenHelter.java n n package com.credream.service; n n import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; n n public class DBOpenHelter extends SQLiteOpenHelper { //父类没有默认构造器,需要显示调用 public DBOpenHelter(Context context) { super (context, "credream.db", null, 1); //数据库创建完成后,默认会保存在<包>/database/文件夹下 //当修改版本号时候,会触发:onUpgrade方法 //第二个:指定数据库名称, //第三个:游标工厂,用来迭代,查询后的结果集,null代表使用系统默认的 n n 游标工厂//版本号,大于0 n } /** n* 这个方法是在数据库第一次被创建的时候调用的 n*/ @Override public void onCreate(SQLiteDatabase db) { //SQLiteDatabase这个类,封装了增删改查操作,也叫做数据库操作实例 db.execSQL("CREATE TABLE person (personid integer primary keyn n n autoincrement, name varchar(20))"); //这里也可以不写name的数据类型,因为sqlite是数据类型无关的,就是写n n 了varchar(20),也可以写入超过20的内容 n n } /** n* 当数据库的版本号变更的时候被调用 n*/ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("alter table person add phone varchar(12) null"); n n } n n } --------------------------------------------------------2.在清单文件中写入测试环境 n n n n n n n n n n ---------------------------------------------------- 3./DBSQLIte/src/com/credream/test/PersonServiceTest.java package com.credream.test; n n import com.credream.service.DBOpenHelter; n n import android.test.AndroidTestCase; n n public class PersonServiceTest extends AndroidTestCase { //创建数据库,在<包>/database/ public void testCreateDB(){ DBOpenHelter dbOpenHelter=new DBOpenHelter(getContext()); dbOpenHelter.getWritableDatabase(); n } n n } -------------------------------------------------------4.选择方法开始测试,然后,在data/data/<包>/database/下 n 查看并用sqlite打开生成的数据库检查是否正确---------------------------------------------然后将版本号,改成2,然后再次执行,看到,表已经被更新,增加了一列phone -----------------------------------------------5.了解sqlite工作的原理: n DBOpenHelter dbOpenHelter=new DBOpenHelter(getContext()); dbOpenHelter.getWritableDatabase(); n 打开getWritableDatabase();代码:

Android期末测试题(附带答案)

一、选择题 1、下列哪项不是Android四大组件( C ) A.Seivice B. Activity C. Handler D. Content Provider 2、Android是如何组织Activity的( B ) A.以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是( B ) A. 在 android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作 UI 组件 C. 新线程可以和 Handler 共同使用 D. 创建的 Handler 对象,它隶属于创建它的线程 4、下列关于内存回收的说明,哪个是正确的(B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、设置xml布局文件中的字体大小一般用什么单位( c ) A.dp B. px C. sp D. pt 6、关于service生命周期的onCreate()和onStart()说法正确的是( D ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 7、Android项目工程下面的assets目录,以下说法正确的是( A ) A.这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B.主要放置多媒体等数据文件 C.主要放置图片文件 D.放置字符串,颜色,数组等常量数据 8、在android中使用SQLiteOpenHelper这个辅助类,生成一个可操作的数据库,调用的方法是( A )A.getReadableDatabase() B.getDatabase() C.getEnbleDatabase() D.createDateBase() 9、Activity从可见状态变为半透明遮盖状态时,生命周期中哪个方法被调用( B )

Android开发的核心知识

想要学习移动应用的开发,除了必备的知识要掌握好之外,更多的是要掌握一些核心的基础知识,并且是能够起到关键性作用的知识点,必须是要了解清楚,如果你也是在学习Android开发,下面的核心基础或者对你有一定的帮助! 1.ListView的引入 为什么要采用listview?其实是在数据量过于庞大时,传统的存储方式它是会占用机器大量内存,最终导致OOM异常(内存溢出),listview的出现将会是有效的解决这个弊端的出现。 重点来了listview如何使用呢? res/layout布局文件中定义listview src的java代码里面关心控件findviewbyid(R.id.listview); 创建适配器对象,适配器继承baseAdapter接口 2.构造方法 getCount();控制listview的条目数 getView();得到当前条目视图 View.inflate();布局填充器 设置适配器:setAdapter(adapter); 设置listview列表项的点击事件:setOnClickLinsstener();

通知listview更新数据:adapter.notifyDataSetChanged(); 3.对话框的使用 *普通对话框 *单选对话框 *多选对话框 *进度对话框 *进度条对话框 *自定义对话框 布局填充器:Viewview=View.inflate(Context,https://www.360docs.net/doc/9014093271.html,yout.dialog,null); 核心API:dialog.setView(view); 4.常见的一些适配器的使用 *数组适配器:ArrayAdapter *简单适配器:SimpleAdapter 5.数据库的常见的事务 为什么需要需要定义数据库事务?最主要的还是为了保证多条操作语句同步执行 6.数据库事务执行流程 db.beginTransaction();开启事务 db.setTransactionSuccessful();设置事务执行成功 db.endTransaction();结束事务 7.样式和主题 样式的作用在单独的UI控件上面 主题的作用它是在activity或者application上 以上的这些功能控件、数据库等这些是开发中必备的功能,在开发中只要这些基本的核心知识都掌握了,那么这对你接下里的进一步开发是比较有帮助的。

张学浩 Android读书笔记之《Android Studio从入门到精通》

《Android Studio从入门到精通》读后感严格来说,这本书应该都不算是一本书,因为没有出版信息。但是又有封面,内容也有这么多,又像是一本书。那么暂且就当它是一本书吧。 这本书的内容呢,作者是泛泛而谈, 你也只需要泛泛而看就行了。我花了一个下午 看完,因为书中的内容,介绍的很简单,基本 上所有的内容我在之前的两本书中都看到过, 所以看起来很快。作者也没有进行深入的讲解, 也只是介绍一下,也并未说明哪些知识点需要 注意或者深入。 作者把书名叫做从“入门到精通”,真的 是有点太吹牛了。就看这么点东西,就能精通? 那精通就真的是太简单了。 书中的代码例子,也不适合演练。因为作 者讲解的代码结构思绪太乱,讲创建这个类那 个类,定义变量等等步骤,也不讲解在哪里创建,放在哪个地方,结果有时候都要摸索半天。我是被折腾的到最后面两章内容都不演练了。 如果你说,代码变量你不知道放在哪个地方,那是因为你不熟悉啊。那反过来讲,如果我熟悉,那我还看这本书吗?不管怎样,仁者见仁智者见智,但我还是细细推敲了。 个人心得

这个周的时间,我用了三天的时间跟着书籍上面的内容实现了,家庭理财通这个小的app,算是用来练手的开始。首先开始实现的时候,我是先从项目的架构开始,首先你的先理解者这个APP具体是干 什么的,有几个模块, 每个模块有几个功能。 大致了解了之后就可 以跟着编写代码。an dorid的编写也是遵 从三层架构的原则, 这里分了三个包。 其中model包下面主要是项目用到的对象的实体类,Dao包下面主要是数据库操作的,myActivi ty是业务逻辑的实现。在编写代码的时候我的顺序是从modle开始,这个也比较简单,很多类只需要写好属性之后就可以直接使用快捷键生成代码。写这个包里面的类的时候,也便于理解项目的内容。写完这个包的内容后,我紧接着实现的是Dao包里面的内容,其中有一个数据库操作的基类,其他的类的方法的这些其实都是差不多的。紧接着实现的布局文件的编写,这个是一个很费时的工作,但是多些代码总是好的,一定不要去粘贴复制代码,这样便于熟悉很多控件的属性,布局什么的。相信你只要老老实实把这个项目里面的布局文件写完,对控件的了解和布局会更熟悉很多。遇到不了解的属性,就百度把他搞懂就OK。不过说句实话,这个app布局确实是丑,我本来打算做完在仔细优化一下界面,但我的指导老师说这个只是个demo,不要花过多时间。于是就没有做这项工作。 数据库的操作 我没有使用模拟器,而是直接使用真机做测试的。关于数据库的操作前需要使用数据线连接到手机,并且首先必须要刷机之后才有root权限,才可以将手机里面app的数据库导出来查看,在android s tudio ->tools->android->android Device Moniter ,点击之后会看到手机的模拟器,点击文件一般的数据库目录都是data目录下面的data目录中对应appd的包中,然后就可以导出来查看数据库。

(完整版)Android应用开发期末考试题

试题 一、选择题 1 android虚拟设备的缩写是(AVD) 2 Android SDK目前支持的操作系统(DOS) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 6以下不是Android中调试项目的正确步骤(测试用例) 7下列不是Activity的生命周期方法之一的是(OnResume) 8以下可以做EditText编辑框的提示信息是(adroid:hint) 9以下不是Activity启动的方法是(gotoActivity) 10以下不是手机操作系统的是(windows vista) 二、填空题 1 Android平台由操作系统,中间件,用户界面和应用软件组成的。 2 Android平台提供了2D,3D的图形支持,数据库支持SQLite,并且集成了浏览器 3目前已知的可以用来搭建Android开发环境的系统有windows,Linux,Mac 等4开发中推荐使用的IDE开发组合为IDE,eclipse,ADI来开发 5 Android SDK主要以java语言为基础 6创建工程时需要填写的信息名称有工程名,包的名字,Activity的名字还有应用的名字

7 Android.jar是一个标准的压缩包,其内容包含的是编译后的class,包含了全部的API 三、简答题 1 Android SDK中API的包结构的划分?至少五个 android.util,android.os,android.content,android.view,android.graphics,android.text 2 Android软件框架结构自上而下可分为哪些层? 应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(RunTime)、操作系统层(OS) 3 Android应用程序的4大组件是什么? Activity、Broadcast Intent Receiver、Service、Content Provider 4 Android应用工程文件结构有哪些? 源文件(包含Activity),R.java文件,Android Library,assets目录res目录,drawble目录,layout目录,values目录,AndroidManifest.xml 5 Android开发应用程序最有可能使用到的应用框架部分是哪些? 一组View(UI)组件,Content Providers,Resource Manger,Notification Manger,Activiy Manger 6 Android底层库包含哪些? 系统C库,媒体库,Surface Manager,LibWebCore,SGL 四、编程 1实现点击一个按钮,结束当前Activity并将需要返回的数据放置并关闭当前窗体请编写核心代码 Bundle bundle = new Bundle ( ); Bundle.putString(“store”,”数据来自Activity1”) ;

Android应用开发基本知识点汇总

Android应用开发基本知识点汇总 Activity 一生命周期 4种状态 running / paused / stopped / killed 生命周期 Activity启动 onCreate -> onStart -> onResume 点Home返回主界面 onPause -> onStop 再次回到原Activity onRestart -> onStart -> onResume 退出Activity onPause -> onStop -> onDestroy 进程优先级前台/可见/服务/后台/空 二任务栈 三启动模式 standard singleTop 栈顶复用 singleTask 栈内复用 singeInstance 四scheme跳转协议 服务器可以定制化告诉App跳转哪个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面 Fragment 一第五大组件 为什么是第五大组件 Fragment相对Activity更节省内存,切换更舒适Fragment加载到Activity的两种方式 静态加载xml 动态加载fragmentTransaction.add(id, fragment, “name”); .commit; FragmentPagerAdapter与FragmentStatePagerAdapter

FragmentStatePagerAdapter在切换时回收内存,适合页面较多的情况FragmentPagerAdapter并没有回收内存,只是detach了Activity 二生命周期 onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach 先创建Activity后创建Fragment,先销毁Fragment后销毁Activity 三Fragment之间的通信 Fragment调用Activity getActivity Activity调用Fragment 接口回调 Fragment调用Fragment方法findFragmentById 四FragmentManager replace add remove Service 一应用场景,与Thread区别 Service是什么后台长时间运行,没有用户界面,运行在主线程,不能有耗时操作 Service与Thread区别 Activity难以与Thread交互,尤其当Activity销毁以后 二开启Service的两种方式 StartService onCreate -> onStartCommand -> onBind -> onDestroy onStartCommand return START_STICKY;

Android学习笔记46:使用Post方式提交数据

Android学习笔记46:使用Post方式提交数据 在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。 在HTTP通信中使用最多的就是GET和POST了,GET 请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST 的参数不是放在URL字符串里面,而是放在HTTP请求数据中。 本文将使用标准Java接口HttpURLConnection,以一个实例演示如何使用POST方式向服务器提交数据,并将服务器的响应结果显示在Android客户端。 1.服务器端的准备 为了完成该实例,我们需要在服务器端做以下准备工作: (1)我们需要在MyEclipse中创建一个Web工程,用来模拟服务器端的Web服务,这里,我将该工程命名为了“myhttp”。 (2)修改该工程的“index.jsp”文件,添加两个输入框和一个提交按钮,作为该Web工程的显示页面。运行Tomcat,

在浏览器中访问该Web工程,可以看到如图1所示的界面。 图1 Web工程的显示页面 (3)在该Web工程中,创建一个继承自HttpServlet的LoginAction类,并实现其中的doPost()方法,用来响应图1所示页面的用户操作。具体实现如下: 1 public void doPost(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 response.setContentType("text/html;charset=utf-8"); 5 request.setCharacterEncoding("utf-8"); 6 response.setCharacterEncoding("utf-8"); 7 PrintWriter out = response.getWriter(); 8 9 String username = request.getParameter("username"); 10 String password = request.getParameter("password"); 11

《Android程序设计》期末试题B

一、判断题(每小题2分,共10分) 1、Android是J2ME的一个实现。() 2、View是ViewGroup的子类。() 3、一个Intent可以包含多个category。() 4、Android系统下的文件,可以被本系统里的所有应用程序访问。() 5、无论Service是以启动方式还是绑定方式运行,该Service类都要重写onBind 方法。() 二、单项选择题(在每小题的四个备选答案中,有且只有一个正确答案,请将正确答案的序号填在题干的括号内。每小题2分,共20分) 1、下列关于继承的哪项叙述是正确的?() A、在Java中类允许多重继承 B、在Java中一个类只能实现一个接口 C、在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口允许继承自另一个接口 2、以下哪种方式不能退出当前活动状态的Activity?() A、调用finish()方法 B、单击(返回)按钮 C、单击(回到桌面)按钮 D、Activity运行时出现异常 3、对于TextView,使用哪个属性来设置显示的文本?() A、android:textSize B、android:text C、android:textColor D、android:string 4、要处理Button的点击事件,需要注册哪个监听器?() A、OnClickListener() B、OnButtonClickListener() C、OnButtonListener() D、OnItemClickListener() 5、浏览网页使用的Intent的Action是什么?() A、ACTION_CALL B、ACTION_EDIT C、ACTION_SEND D、ACTION_VIEW 6、Android 关于启动方式的service生命周期的onCreate()和onStartCommand()方法,说法正确的是()

复习材料《Android移动应用开发技术》

1、关于android进程,说法不正确的是( B ) A、组件运行所在的进程,是由androidManifest.xml决定,它可以指定该组件运行于哪个进程。 B、背景进程是不为用户所见的Activity,但是还会有可能被用户看到,所以它不能被杀死 C、当急需内存时,android会决定优先关闭那些空闲的进程 D、可视进程一般不会不被系统所杀死 2、Matrix类的作用( A ) A、可以存储缩小或放大比列 B、存储文件中的图片信息 C、存储资源中的图片信息 D、存储内存中的图片信息 3、关于主题的说法,错误的是( D ) A、它是属性集合 B、它可以在程序中来设置 C、它通常用于一个Activity或所有Activity上 D、它可以用于单个TextView上 4、setOnTouchEvent 设置返回值为true 和 false有何区别?以下说法较准确是( C ) A、没有区别,都能对事件进行监听 B、设置为true时只能在移动时获得一次监听事件,false则可以多次 C、设置为false是,在处理一次监听事件后,系统将抛弃该次事件 D、返回true表示这个消息已经被处理结束,后续的handler不再接收到这个消息 二、开发技术设计与应用能力部分 注:以下程序均是相关程序或小项目的实现代码,根据每个程序或项目的特性,完成程序空缺部分的内容,使其实现。具体程序代码注释省略。 图1 图2 图3 图4 1)电话实现[主界面如图1] 程序描述:完成手机打电话功能。 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/9014093271.html,yout.activity_main); Button btn_call = (Button)this.findViewById(R.id.btn_call); btn_call.setOnClickListener(new btnCall()); } private class btnCall implements OnClickListener (1) { public void onClick(View v) { // TODO Auto-generated method stub EditText et_number = (EditText) MainActivity.this.findViewById(R.id.et_number); String s_number = et_number.getText().toString().trim(); (2) Intent i_call = new Intent(); i_call.setAction(Intent.ACTION_CALL(3)); i_call.setData(Uri.parse("tel:"+s_number)); startActivity(i_call); (4) } } } 2)动画实现[主界面如图2] 程序描述:手机屏幕触摸后演示动画,假设XML文件已经设置好,id资源为:R.drawable.panda public class MainActivity extends Activity { ImageView iv_action; AnimationDrawable ad_action; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/9014093271.html,yout.activity_main); iv_action = (ImageView)this.findViewById(R.id.iv_action); iv_action.setBackgroundResource(5)(R.drawable.panda); ad_action = (AnimationDrawable) iv_action.getBackground(); } public boolean onTouchEvent(MotionEvent event) { ad_action.start();(6) return super.onTouchEvent(event); } } 3)撕衣服游戏实现 项目描述:划动屏幕时完成撕衣服效果,并产生撕衣服声音(sound.mp3) public class MainActivity extends Activity { ImageView iv_upper; ImageView iv_below;

安卓开发学习笔记

1.avd:android virtual device 2.5554:模拟器端口号 3.ddms 观察线程thread 堆栈heap 、file explorer、emulator control(模拟打电话发短信) 4.Extras文件夹拓展工具 5.Adb.exe: android debug bridge 安卓调试桥 6.Adb常用指令:(配置环境变量) 1)adb devices:列出所有连接设备 2)Reset adb:重启adb调试桥 3)Adb kill-server:杀死adb调试桥 4)Adb start-server:启动adb调试桥 5)Netstat -ano:查看端口号 ----------------------------------------------------------------------------------------- 7.Platforms是系统文件 8.Assets是资产目录存放在该文件夹下面这些文件会被打包到应用程序的apk 9.Bin 编译后的文件目录 10.Gen自动生成的其下的R.java的内容也是通过修改其他文件内容而自动生成 11.Android.jar基于此jar包的开发 12.Project.properties 代表编译的版本可以修改 13.Libs 支持jar 包会被添加到Android dependence(依赖)目

录下 14.Res 资源目录 15.Drawable存放应用程序图标会自动生成一个id 在R文件里 1)H high 高分辨率 2)M middle 中分辨率 3)L low 低分辨率 4)X extra large 特大分辨率 5)Xx 超大分辨率 16. R文件的作用:自动编译生成res文件中的ID 17.Android manifest:应用程序的清单文件 程序的配置信息启动的图标应用程序名称包名版本号 -------------------------------------------------------------------------------------- 18.Android下软件安装的过程: 1)拷贝xxx.apk到/data/app/xxx-1.apk 2)在data/data目录下创建一个文件夹文件夹名称是当前应 用程序的包名。 3)软件卸载的过程是相反的 19.system/app下安装的是系统自带的应用 20.Windows下注册表是通过数据库实现;Android下的注册表是用xml文件实现

ANDROID实训心得体会

项目总结 时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我 们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平 都有很大的提高,我们非常感谢这次实训。 刚开始二周的高强度的课程安排让我们受益匪浅;接下来的项目实训又让我们可以巩固 了课程。这让我觉得实习生活充实而有意义。 乐淘购物项目和android优化大师,我更好的学习了ui的设计,如何使界面漂亮,美观, 巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这 两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完 成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获 取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上 真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。 音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人, 都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队 的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具 体实践中,不仅加深我对理论的掌握和 运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。 这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到 感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发! 相信这些宝贵的经验会成为我今后成功的重要的基石。在此,我非常感谢指导老师和 同学对我的帮助。篇二:android实训报告 通信与电子信息专业实训报告 项目名称:基于android的游戏开发 班级 10通信1班 姓名 学号 指导教师 成绩 实训时间:年月日— 目录 一、实训目的及其意义 (3) 1.1、目的及意义 (3) 1.2、研究现状 (3) 二、实训主要任务、重点及难点 (4) 2.1、任务 (4) 2.2、重点内容及实现途径 (4) 三、实训具体内容及完成的主要工作 (5) 3.1、认识基础开发 (6) 3.2、了解数据存储 (6) 3.3、总体实训过程 (7) 四、实际遇到的困难,解决问题的方法和措施 (8) (一)、所遇问题 (8) (二)、解决方法与措施 (9) 五、心得体会 (9)

相关文档
最新文档