Android知识点整理(带目录).docx_第1页
Android知识点整理(带目录).docx_第2页
Android知识点整理(带目录).docx_第3页
Android知识点整理(带目录).docx_第4页
Android知识点整理(带目录).docx_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android知识点整理目录一、项目目录结构:41.布局控件42.ListVIew控件53.Widget:(窗口小部件)64.Activity Manager6二、应用程序的5个模块构成:61.Activity62.BroadcastReceiver(广播接收者):93.Service(服务)104.Content Provider(内容提供者)125.Intent(意图)121)短信发送器:132)单元测试:143)Tag: 输出日志信息14三、数据存储与访问:151.文件存储:152.Sharedpreferences配置参数保存163.SQLite数据库:164.网络(在互联网服务器中存储)Network:195.内容提供者(Content Provider) 数据对外共享206.XML解析214)DOM215)SAX216)PULL21四、多线程:24五、动画与显示241.Tween:242.显示:24六、多媒体:251.音乐播放器:252.视频播放器:26七、网络通信:271.HTTP通信:282.Socket通信:283.Webservice:29八、手势识别:31九、应用关闭:2.2之前版本31十、WebKit应用:32十一、对话框、文本框和进度条:321.话框通知(Dialog Notification):322.创建带单选项列表的对话框:333.创建带多选项列表的对话框:344.进度对话框(ProgressDialog)355.单选框(RadioButton)356.多选框(CheckBox)357.下拉列表框(Spinner)358.下拉列表框采用javabean作为Adapter元素359.下拉列表框-自定义选项界面样式3610.拖动条(SeekBar)3611.菜单(Menu)3612.进度条(ProgressBar)3613.输入内容自动完成文本框(AutoCompleteTextView )3614.多次输入-内容自动完成文本框(MultiAutoCompleteTextView)37十二、手机通讯381.判定SIM运营商382.提取SIM联系人383.删除呼叫记录39十三、ndk (本地文件开发包)39一、 项目目录结构:Src: java.class源文件Gen: Android开发工具自动生成.自动维护,不能修改R.java 不能手工修改此类中的内容记录各种资源的ID 可以根据R文件中的ID查找各个方法Assets: 存放资源文件.但存放的资源不会在R.java中生成ID必须指定路径才能引用其中的文件Res: 存放各种资源文件.drawable-hdpi:里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)drawable-ldpi:里面存放低分辨率的图片,如QVGA (240x320)drawable-mdpi:里面存放中等分辨率的图片,如HVGA (320x480)在分辨率低于480*800时把图片放在drawablemdpi中是不会有什么影响,但是当分辨率为420*800或高于它时就会出问题了。你的手机屏幕有那么大但是他会将图片拉伸,当加载图片后让你感觉该屏幕没有实际的大小,而如果将图片放到drawablehdpi中则该问题就不会存在了。比如手机屏幕的大小为420*800如果你将图片放在drawablemdpi中,那么你就要准备一张340*525分辨率的图片,系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。layout: main.XML界面资源Values:为根节点 通过string指定 String.XML应用中文字,尺寸,颜色等数据Dperties :系统文件AndroidManifest.XML:项目清单文件.配置文件. 权限配置.1. 布局控件: 画廊式TabWidget:切换卡TextView:文本框:按钮控件:编辑框. EditText.setHint(“设置默认背景内容”)XML设置:android:hit=” 设置默认背景内容”:图片显示控件+id/button :在R文件内的ID中内部类添加常量button.引用button为Button的IDFindViewbyid(R.id.button); /获取按钮Setonclicklistener(); /获取点击事件Gettext().toString(); /获取用户在文本框中输入的数据.转换为字符串Android:gravity=”XXx” 重心偏移Android:minLines =”3”; /指定文本框的高度.控件:Android:numecic: 限制文本框只能输入数字Android:phoneNumber=”true” 只接收电话号码控件: 设置按钮图标使用Android:Onclick=”query” 当用户点击按钮时,调用query中的点击方法自动适应屏幕的模式,横竖屏自动转换:Android:layout_weigth=”0-?” 确定显示控件优先确定 默认为0,0为最大 :水平滑动布局RandOmAccessFile:随即文件访问方法进度条设置Style=”android:style2. ListVIew控件用于将各种控件,数据显示到屏幕上了解ListView的用法.如何将数据显示到屏幕上,添加点击事件进行操作定义简单的适配器用来将绑定数据显示到ListView控件上: 1.Simpleadapter:用于得到给定数据索引位置的数据对象getitemAcposition(),内部使用get()方法取得数据的位置获取ListView中数据进行点击事件.通过调用数据的索引位置来进行点击事件2.当业务bean返回类型为cursor类型时:业务bean中Cursor游标对象不能关闭,适配器对cursor对象进行迭代访问,关闭后无法得到数据表主键取名时 id 建议取名加 _id;否则会出错使用SimpleCursorAdapter 3. Widget:(窗口小部件) :每个widget就是一个BroadcastReceiver(广播接受者)使用XML metadata来描述Widget细节4. Activity Manager在Android中,应用的响应性被活动管理器 和窗口管理器(Window Manager)这两个系统服务所监视。 当用户触发了输入事件(如键盘输入,点击按钮等), 如果应用5秒内没有响应用户的输入事件,那么,Android会认 为该应用无响应,便弹出ANR(Application No Response) 在正常情况下,Android程序会在一条单线程里运行。如果Activity要处理一件比较耗时的工作,应该交给子线程完成,否侧会因为主线程被阻塞,后面的用户输入事件因没能在5秒内响应,导致应用出现ANR对话框。 二、 应用程序的5个模块构成:1. Activity(活动窗口):监听各种系统事件对话框主题: 多个Activity同时出现在一个程序中需要在AndroidManifest.xml 申请配置void onCreate(Bundle savedInstanceState)onCreate() onStart()- onResume()- onPause()- onStop()- onDestroy()创建-开始- 恢复-暂停- 停止- 销毁Task:启动模式:android:launchModeStandard: 每次访问实例化新的.singleTop: 每次访问,看栈顶元素是目标对象,是则返回,不再实例化,否则,还是实例化.singelTask: 保证activity实例化一次,单任务,由此所开启的活动和本活动位于同一task中 .singelInstance: 保证activity实例化一次,单实例,由此所开启的活动在新的task中,和本活动id不一致.三种状态:运行状态: 处于激活状态,能够响应用户操作 触发onCreate();onstart();onresume();暂停状态: 被新应用部分覆盖,用户仍然可见,; 触发onPause();-打开Activity次方法必然调用停止状态:新应用完全覆盖,状态.信息等仍然保留.但用户不可见 触发onStop()-视应用是否可见来调用;onDestory();关闭新的Activity重新触发onCreate();onstart();onresume()方法.Android系统为了让程序再次启动的速度更快.程序并没有真正意义的关闭.而是存储在内存中内存管理机制:在内存不足时为了让系统决定杀死哪个进程,Android 根据每个进程中运行的组件以及组件的状态把进程放入一个“重要级别(importance hierarchy)”中,级别低的进程优先被杀死。进程的重要级别排序(级别高的排在前面):1.前台(foreground)进程,与用户当前正在做的事情密切相关。当下面任何一个条件满足时,会考虑将进程移到前台: 进程正在屏幕的最前端运行一个与用户交互的Activity (它的onResume()方法被调用) 进程有一正在运行的BroadcastReceiver (它的BroadcastReceiver.onReceive()方法正在执行) 进程有一个Service,并且在Service的某个回调函数(Service.onCreate(), Service.onStart(), Service.onDestroy())内有正在执行的代码。 2.可见(visible)进程,它有一个可以被用户从屏幕上看到的Activity,但不在前台(它的onPause()方法被调用)。3.服务(service)进程,进程中存在一个已经用startService()方法启动的Service。4.后台(background)进程, 拥有一个当前用户看不到的Activity(它的onStop()方法被调用)。 5.空(empty)进程,不包含任何处于活动状态的应用程序组件。onSaveInstanceState() :当应用遇到意外情况由系统销毁一个Activity时会调用此方法来缓存一些数据onRestoreInstanceState() :调用此方法恢复缓存的数据,重写onSaveInstanceState()和onRestoreInstanceState()方法 private String name; protected void onRestoreInstanceState(Bundle savedInstanceState) name = savedInstanceState.getString(name); /被重新创建后恢复缓存的数据 super.onRestoreInstanceState(savedInstanceState); protected void onSaveInstanceState(Bundle outState) outState.putString(name, liming);/被摧毁前缓存一些数据 super.onSaveInstanceState(outState); Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap类型的变量来存放putXxx()方法放入的值:public final class Bundle implements Parcelable, Cloneable Map mMap; public Bundle() mMap = new HashMap(); public void putString(String key, String value) mMap.put(key, value);public String getString(String key) Object o = mMap.get(key); return (String) o; ./类型转换失败后会返回null,这里省略了类型转换失败后的处理代码在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。请求码用于标识结果数据来自哪个startActivityForResult(Intent intent, int requestCode)方法结果码用于为结果数据定义唯一id2. BroadcastReceiver(广播接收者):OnReceive()方法在10秒内没有执行,androidh会认为该程序无响应两种注册方式:代码注册,manifest中配置声明周期较短. 如有耗时的工作,应该通过发送Intent给Service.由Service来解决,不能让子线程解决短信窃听器: 继承BroadcastReceiver intent的action名称为: vider.Telephony.SMS_RECEIVED获取信息内容:Object pdus = (Object) intent.getExtras().get(“pdus”); 系统内部自动对pdus进行解析循环迭代信息内容For(Object pdu : pdus)格式转换”2011-01-01 12:00:00”SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)String time = format.format(date) 拦截外拨电话:获取拨打的号码 getResultData();将获取到得号码设置为null setResultData(null);两种类型: 粘性广播普通广播(Normal broadcasts), :接受者不能将处理结果传递给下一个接收者.并且无法终止广播Intent的广播有序广播(Ordered broadcasts):系统发出的广播为有序广播, 有序广播按照接受者声明的优先级别被接受者一次接收广播a.在属性中声明,数值越大优先级别越高,取值范围”-1000-1000”b调用intentFilter对象的Priority() 设置通过调用IntentFilter对象的setPriority()进行设置配置广播清单:在AndroidManifest.xml中abortBroadcast(); /终止广播传递(android interface definition language)一种接口定义语言约束两个进程间的通讯规则,供编译器生成代码,实现与两个进程之间的通信 文件后缀名为 aidl Interface IPersonService String sayHello(String name) android自动在gen目录下生产对应的java类1.接口名与aidl文件名相同2.接口和方法千不用加访问权限修饰符:public orivate ,protected等.也不能用final ,static3. Aidl默认支持类型包括java基本类型(int,long,boolean等)和(String,Llist,Map,CharSeqence),使用这些类型是不需要import声明 ,对于list和map中的元素类型必须是Aidl支持的类型,如果使用自定义类型作为参数或返回值,自定义类型必须实现Parcelable接口4自定义类型和AIDL生成的其他接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中5 在aidl文件中所有非java基本数据类型参数必须加上in ,out inout标记.以指明参数是输入参数.输出参数还是输入输出参数6 java原始类型默认的标记为in.不能为其他标记3. Service(服务)一个生命周期长并且没有用户界面的程序在系统后台运行onCreate(),只在服务创建时调用一次. 无论调用多少次startService()或bindservice().服务也只创建一次启动方式:Stratservice:第一次启动at()onStartCommand()启动后startCommand()Stopservice:Ondestroy();服务与访问者在同一应用,仅供内部访问称为本地服务内存交互服务与访问者在不同应用属于外部调用访问则为远程服务通过操作系统中介进行交互 继承Service类.android.app包startService()启动服务stopservice()关闭服务适用于服务和访问者之间没有交互在androidManifest.xml文件中节点里对服务进行配置媒体刻录机: MediaRecorder recorder = new MeidaRecorder();电话窃听器:监听电话三种状态:空闲状态: LISTEN_CALL_IDLE响铃状态:LISTEN_STATE_RINGING接听状态:LISTEN_STATE_OFFHOOK注册监听器:将录音文件保存在SDCARD根目录下;将录音文件上传到服务器中:bindService()启动服务 unbindService()关闭服务 适用服务与访问者之间需要方法调用或者传递参数IBinder:远程过程调用的核心部分4. Content Provider(内容提供者)实现程序与程序间的数据共享,需要在androidMainfest.XML声明5. Intent(意图)通过intent激活其他组建 三种核心组件,活动,广播接受者,服务1.用于返回新Activity结束后的结果数据:StartActivityForResult(intent,resultCode标识应用中的调用位置); 2.重写 onActivityResult 方法protected void onActivityResult(int requestCode, int resultCode, Intent data)用于往Activity传递数据Activity1: Intent.putExtre(“name”, “名称”); /添加数据Activity2: intent.getintent(); String name = intent.getStringExtra(“name”); /获取Activity1的数据显式意图:调用intent.setcomponet()intent.setclassName()或intent.setclass()方法明确指定了组件名隐式意图:根据设置的动作(action),类别(category),数据(URI和数据类型)找到合适的组件来处理没有数据内容项的时候intent中的Action和category都必须出现在intentfileer中 隐式方法中设置的动作(action),类别(category),数据(URI和数据类型)必须与intent-filter 中的设置一致 SetType():会自动清除setData()所设置的数据,所以要用到setDataAndType(setData() , SetType();应用之间激活对方组件 使用隐式 -性能比显式较低,内部有查找过程应用内部激活自身组件 使用显式 - startActivity(); -激活制定的Activity在一个程序中添加多个Activity任务堆栈存放每个Activity实例的。当应用新打开时,入口activity会放在任务堆栈顶部,当在入口activity中激活了新的activity时,新的activity实例会放在堆栈顶部默认行为:采用intent激活组建,会创建一个新的组件实例,放在堆栈顶部。修改需要在 AndroidManifest.xml 配置对应的android:launchMode=”standard-默认行为;singleTop-当Activity存在时,使用intent激活时重新调用该Activity;singleTask-打开Activity时会在新的堆栈中执行-新进程中运行;singleInstance-Activity在堆栈中存在时直接打开,永远保持一个Activity;”Application name: 应用的名称.默认出现在程序的图标的底下,标题栏.可以进行修改.Package: 包名为一标识一个应用.,一般存放java源文件.Greate Activity: 代表一个可以接收用户输入信息,事件的窗口.Min SDK Version:版本对应的级别.像素单位,px , dip | dp-常用像素密度使用 , sp, -文字使用 Android中数据采用URI表示Setdata(Uri.parese(“”);调用 StartActivity() ;方法把意图传给操作系统. 激活对应的Activity访问网络权限设置权限:定义.summary类./方法的内部会自动为intent对象设置类别:ent.category.DEFAULT权限定义在XML文件;1) 短信发送器:短信字符限制:70个汉字(包括标点),150个英文字母.短信拆分.-SmsMaager.getDefault();短信发送:SendTextMessage(destinationAddress)手机号, (scAddress)短信中心地址默认为null, 短信内容(text),(sentIntent)传一个广播意图,获取发送短信后的状态默认为null, (deliveryintent)得到发送短信后对方是否收到短信的状态默认为null)通知方式:Toast.makeText(context(上下文对象)类名.this或getapplicationcontext(),指定文字的自然ID text, dutation(toast在屏幕上显示的时间 Toast.0或1).show();2) 单元测试: 新建等待测试的业务类; 单元测试包跟应用包同名.单元测试类继承AndroidTestCase,/定义一个TAG方法,进行测试;private static final String TAG =PersonServiceTest;/方法名称必须加上testpublic void testSave() throws Throwable测试权限设置: 在节点下,放置单元测试库结果检验.方法是否正常.3) Tag: 输出日志信息Log.v(TAG, VERBOSE); /verbose 所有信息 Log.d(TAG, DEBUG); /debug-除错 Log.i(TAG, INFO); /info-信息 Log.w(TAG, WARN); /warn-警告 Log.e(TAG, ERROR); /error-错误三、 数据存储与访问:1. 文件存储:保存的文件默认存放在/data/data/files 目录下Context.Openfileoutput(文件名称,文件的操作模式(Context.MODE_PRIVATE)私有操作模式只能在本应用操作文件,以覆盖方式写入数据); /创建一个文件.默认存放在手机存储空间4种文件操作方式:1. context.MODE_PRIVATE:默认操作模式,只能被应用本身进行读取写入.以覆盖方式写入数据2. context.MODE_APPEND:文件存在则在文件末尾追加内容.否则创建新文件3. context.MODE_WORLD_READABLE:能被其他应用读取数据.4. context.MODE_WORLD_WRITEABLE:能被其他应用写入数据.不能被读取要追加内容需要改变路径保存方式(path, true()默认为false以覆盖方式写入数据)getcacheDIr(); 获取/data/data/cache 目录-保存缓存getfileDir(); 获取/data/data/file 目录-保存文件(context.MODE_WORLD_READABLE+ context.MODE_WORLD_WRITEABLE);通过this.openfileputput(“”,context.Mode_private)方法保存文件.文件将存储在默认目录下调用这个方法取得外存储设备的路径,应对不同版本的系统:Environment.getEcternalStorageDirectory() ,filename;首先判断SDcard是否存在if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) File sdCardDir = Environment.getExternalStorageDirectory();/获取SDCard目录2. Sharedpreferences配置参数保存存放软件的配置参数保存的文件默认存放在/data/data/shared_prets目录下This.getSharedpreference(“?”, );-追加方式存储数据获取编辑框内容:edit.putString(“name”, name); Edit.putInt(“age”,age);调用mit(),回写到文件中数据默认保存在内存中 ,3. SQLite数据库:SQlite: 存储地址:/data/data/databases关系型数据库.支持5种据类型:NULL, NTEGER, EAL(浮点数字), EXT(字符串文本), LOB(二进制对象)无需加载数据库.自动加载驱动存储字段无数据类型限制 可以保存任何类型数据.Super(content, “数据库名称”, 工厂方法.默认为null, 版本号:数据库第一次创建版本号为0.获取5条记录.跳过前面3条Select*from Account limit 5 offset 3继承 SQLiteOpenHelper- .通过getreadabledata (一般用于读取数据)或 .getwriteabledata (一般用于修改数据)创建数据库操作数据库使用openorcreateDatanase,存在则打开,不存在则创建,创建成功返回SQLiteDatabase对象创建表:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20);查询表:private DBOpenHelper dbOpenHelper;public PersonService(Context context)dbOpenHelper = new DBOpenHelper(context);public void payment()SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.beginTransaction(); /开启事务trydb.execSQL(update person set amount=amount-10 where personid=2);db.execSQL(update person set amount=amount+10 where personid=3);db.setTransactionSuccessful();finally/默认情况下,事务标志为Falsedb.endTransaction();/提交还是回滚,是由事务标志决定的,如果事务的标志为True,就会提交事务,否则回滚事务public void save(Person person)SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL(insert into person(name,phone,amount) values(?,?,?),new Objectperson.getName(), person.getPhone(), person.getAmount();/db.close();public void delete(Integer id)SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL(delete from person where personid=?, new Objectid);public void update(Person person)SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL(update person set name=?,phone=?,amount=? where personid=?,new Objectperson.getName(), person.getPhone(), person.getAmount(), person.getId();public Person find(Integer id)SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery(select * from person where personid=?, new Stringid.toString();if(cursor.moveToFirst()String name = cursor.getString(cursor.getColumnIndex(name);String phone = cursor.getString(cursor.getColumnIndex(phone);int amount = cursor.getInt(cursor.getColumnIndex(amount);cursor.close();return new Person(id, name, phone, amount);return null;public List getScrollData(int offset, int maxResult)List persons = new ArrayList();SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery(select * from person order by personid asc limit ?,?, new StringString.valueOf(offset), String.valueOf(maxResult);while(cursor.moveToNext()Integer id = cursor.getInt(cursor.getColumnIndex(personid);String name = cursor.getString(cursor.getColumnIndex(name);String phone = cursor.getString(cursor.getColumnIndex(phone);int amount = cursor.getInt(cursor.getColumnIndex(amount);persons.add(new Person(id, name, phone, amount);cursor.close();return persons;public long getCount() SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery(select count(*) from person, null);cursor.moveToFirst();long result =cursor.getLong(0);cursor.close();return result;通过cursor对象对结果集进行随即访问.移动游标指针到指定位置 .rawQuery用Cursor类来实现;使用 SQLiteDataBase.query()返回cursor对象事务操作: beginTransaction() /开启事务设置调用事务try setTransactionSuccessful()finally EndTransaction()/提交事务,默认为fals;如果事务的标志为True,就会提交事务,否则回滚事务隔离级别:1,读未提交 2, 读已提交 4,可以重复读 8,串行化.悲观锁,不支持并发,安全性高,性能低4. 网络(在互联网服务器中存储)Network:通过“GET” “POST”方法获取静态页面,1. 检测网络状态:ConnectivityManager cm = (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo netInfo = cm.getActiveNetworkInfo();netInfo.toString();2.使用网络权限3.通过URL+HttpURLConnection获得数据(文本和图片) 注:HttpUrlConnection中的is和os都是指body部分的数据.URL url = new URL();HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5* 1000); /设置超时时间conn.setRequestMethod(GET);/ 设置提交方法conn.getResponseCode() != 200) throw .; /响应码InputStream is = conn.getInputStream();String result = readData(is, GBK);conn.disconnect();/获取图片同上.5. 内容提供者(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论