本文为我这个学渣的自我救赎笔记,只能包含一些重点了
|
四大组件:Activity、BroadcastReceiver(广播接收者)、Service(服务)、Content Provider(内容提供者)
|
目录(链接)
1,安卓四层结构体系,名称和内容
2,安卓UI各类布局属性,控件资源和属性
3,activity编程(可能有大题),数据的启动、跳转、回传
4,数据存储的参数、名称、属性
5,SQLite的crud(会写)
6,BroadcastReceiver和ContentProvider使用方法
7,Service的基本概念,重点关注启动方式和生命周期
一,安卓四层结构体系,名称和内容
- 应用程序:设备上安装的软件应用都属于这一层。
- 应用程序框架:应用程序框架层主要提供了构建应用程序时用到的各种应用API。
- 核心类库:包含系统库和运行环境。系统库包含了底层C代码;运行环境包含了Java的核心库和Dalvik虚拟机。
- Linux内核:提供Android的底层驱动。
二,安卓UI各类布局属性,控件资源和属性
六种布局:
- RelativeLayout:相对于其他控件或者容器决定控件的位置;
- LinearLayout:使控件以竖直或者水平方向排列;
- TableLayout:使控件以表格形式排列;
- GirdLayout:能使控件交错显示,能够避免因布局嵌套对设备性能的影响,更能利于自由布局的开发;
- FrameLayout:使控件按照创建顺序在屏幕的左上角重叠显示;
- AbsoluteLayout:通过绝对的坐标控制控件摆放的位置;
常用控件:
- TextView:文本框
- 文本信息,通过TextView控件显示的。TextView控件属性包含:字体大小、颜色、样式等。
- EditText:编辑框
- 继承自TextView,与其最大的区别是用户可以在设备上对EditText控件进行操作,同时可以为EditText控件设置监听器,用来测试用户输入的内容是否合法。
- Button:按钮
- 点击方式有3种,在布局中指定onClick属性、使用匿名内部类、在当前Activity中实现OnClickListenner接口。
- RedioButton:单选按钮
- 需要与RedioGroup配合使用,提供两个或多个互斥选项集。
三、activity编程(可能有大题),数据的启动、跳转、回传
四种启动模式:
- Standard:每当启动一个新的Activity,它就会进入任务栈,并且处于栈顶的位置,对于使用Standard模式的Activity,系统不会判断该Activity在栈中是否操作,每次启动都会创建一个新的实例。
- SingleTop:与standard类似,不同的是,当启动的Activity已经位于栈顶,则直接使用它不创建新的实例。如果启动的Activity没有位于栈顶时,则创建一个新的实例位于栈顶。
- SingleTask:创建的Activity只存在一个实例。已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例。
- SingleInstance:启动一个新的任务栈管理Activity。
Activity三种状态:
- 启动状态:启动后,就会进入到运行状态。
- 运行状态:该状态下可以对界面进行操作。
- 暂停状态:界面可见但不具有焦点无法点击。
- 停止状态:界面不可见,一般在停止状态时保存数据防止程序被系统强制杀死。
- 销毁状态:当处于销毁状态时,将被清理出内存。
Activity之间的跳转
Activity之间的跳转需要Intent(意图)组件,通过Intent可以开启新的Activity实现界面跳转功能。
|
1,显式意图
Intent intent =new Intent(this,Activity02.class);
intent.putExtra("extra_data","hello Activity02");
startActivity(intent);
数据接收
Intent intent =getIntent();
String data=intent.getStringExtra("extra_data");
2,隐时意图
相对显示来说,更为抽象,它并没有明确指定要开启哪个目标组件,而是通过action与category来指定
数据回传
在Activity中,使用Intent既可以将数据传给下一个Activity,还可以将数据回传给上一个Activity。Activity中提供了一个startActivityForResult(Intent intent,int requestCode)方法,该方法也用于启动Activity,并且这个方法可以在当前Activity销毁时,返回一个结果给上一个Activity。
|
Activity01:
Intent intent=new Intent(this,Activity02.class);
startActivityForResult(intent,1);
Activity02:
Intent intent=new Intent();
intent.putExtura("extra_data,"hello activity01");
setResult(1,intent);
带回来的结果,request是你请求码,request是返回码(这两个码确定是哪个信息),intent是返回信息:
protected void onActivityResult(int requestCode,int resultCode,Intent intent){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==0){
if(resultCode==0){
String string =data.getStringExtra("extra_data");
}
}
}
四,数据存储的参数、名称、属性
-
XML解析方式:
- DOM解析
- 以DOM树存储到内存中,支持删除、修改
- SAX解析
- 逐行扫描XML文件:速度快,缺点是:只能读
- PULL解析
- 开源的Java项目,除了安卓,JAVAEE也可以使用(就是我们熟悉的JavaEE项目中的那种XML解析方式)
- DOM解析
-
JSON解析(就是json格式的那一套)
- 对象结构
- 数组结构
- 安卓通过org.json包下的JSONObject和JSONArry两类对数据解析:
- JSONObject通过的是optString方法通过key获取values。
- JSONArray通过的是.optInt(i)遍历获取数组对象。
5种存储方式:
-
文件存储:文本、音频、图片等
- 分内部存储和外部存储 :
- 内部存储将应用程序中的数据以文本的方式存储到设备内部。
- openFileInput():打开应用程序的输入流,读取指定文件中的数据
- openFileOutput():打开应用程序的输出流,将数据存储到指定文件
- mode:文件的操作模式
- MODE_PRIVIDER:只能被当前程序读写
- MODE_APPEND:追加
- MODE_WORLD_READABLE:可被其他程序读
- MODE_WORLD_WRITEABLE:可被其他程序写
- 外部存储是指将文件存储到一些外部设备(如:SD卡)
- FileInputStream:读取外部信息
- FileOutputStream:信息写到外部存储设备
- 内部存储将应用程序中的数据以文本的方式存储到设备内部。
- 分内部存储和外部存储 :
-
SharedPreferences:采用k 、v的形式存储一些简单的配置信息,采用XML格式
- values只能是Float、Int、Long、Boolean、StringSet类型
- 存储数据:
- 先调动getSharedPreferences(String name,int mode)方法获取实例对象:文件名、文件操作模式。需要调用其edit()方法获取可编辑对象,最后通过putString和putInt方法存储数据。remove删除一条数据,clear删除所有数据
- 获取数据:
- SharedPreferences sp = getSharedPreferences(“data”,“MODE_PRIVATE”);
- String data=sp.getString(“name”,"");第二个对象是缺省值(不存在就返回第二个空字符串)
-
SQLite数据库
- 遵循ACID的关系型数据库,ACID是数据库事务正确执行的4个基本要素。原子性、一致性、隔离性、持久性。
- 需要创建一个类继承自SQLiteOPenHelper并且重写onCreate方法和onUpdate方法
-
ContentProvider
- 应用程序间的数据交换,可以将自己的数据分享给其他应用程序使用。
-
网络存储
- 将数据存储在服务器上,通过网络提供的存储空间来存储、获取数据信息。
五,SQLite的crud(会写)
增加一条数据
public void insert(String name,String price){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",name);
values.put("prices",prices);
long id=db.insert("information",null,values)//第二个意思是:如果为空行,则列名的值设置为null
db.close();
}
修改一条数据
public void insert(String name,String price){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("prices",prices);
long number=db.update("information",values,"name=?",new String[]{name});
db.close();
return number;
}
删除一条数据
public int delete(long id){
SQLiteDatabase db=helper.getWritableDatabase();
int number=db.delete("information","_id=?",new String[]{id+""});
db.close();
return number;
}
查询一条数据
public boolean find(long id){
SQLiteDatabase db=helper.getWritableDatabase();
Cursor cursor=db.query("information",null,"_id=?",new String[]{id+""},null,null,null);
boolean result=cursor.moveToNext();
cursor.close();
db.close();
return result;
}
六,BroadcastReceiver和ContentProvider使用方法
接收广播:继承BroadcastReceiver类,重写onReceive()方法
内容提供者:访问之前需通过Context中的getContentRedolver()方法获取
- 其他与SQLiteDatabase相似
七,Service的基本概念,重点关注启动方式和生命周期
创建方法:new ->service->service,在弹出来的窗口中输入名称即可
-
启动方式
- startService()方法
- 创建程序
- 创建服务:重写onCreate()、onStartCommond()、 onDestory()方法
- 编写界面交互代码
- 运行程序
- bindService()方法
- 创建程序
- 创建服务:重写onCreate()、onBind()、onUnbind()、以及自定义的methodInServices()方法。
- 编写界面交互代码
- 运行程序
- startService()方法
-
startService()方法生命周期
- onCreate()
- onStartCommond()
- onDestory()
-
bindService()方法生命周期
- onCreate()
- onBind()
- onUnbind()
- onDestory()