Android基本概念总结
Android工程师
源码开发(手机定制软件)
系统开发(驱动 系统软件)
应用开发 (单机 联网 游戏 应用)
一.Android应用程序的组成部分
Activity
Activity 应用程序的表示层。应用程序中的每一个UI都是通过Activity类的一个或多个扩展实现的。Activity使用Fragment和试图来布局和显示信息,以及响应用户动作。
Service
应用程序中不可见的工作者。Service组件在运行时没有UI,它们可以更新数据源和Activity,触发通知和广播Intent。它们被用来执行一些运行时间长的任务,或者不需要用户交互的任务(例如,即使当应用程序的Activity不是活动的或者可见的时候也需要继续进行网络查找或其他网络任务)
Intent
一个强大的应用程序间的消息传递框架。安卓中大量使用了Intent,它可以用来启动和停止activity和service,在系统范围内或向目标Activity,service或者Broadcast Receiver广播消息,以及请求对特定的一条数据执行操作。
Broadcast Receiver
Intent侦听器。Broadcast Receiver使应用程序可以监听到那些匹配指定的过滤器标准的Intent广播。Broadcast Receiver会自动地启动应用程序来响应某个收到的Intent,这个特点使它们成为了事件驱动的应用程序的最佳选择。
Content Provider
一个可以共享的持久数据存储器。Content Provider用来管理和持久化应用程序数据,通常会与SQL数据库交互。Content Provider是在应用程序之间共享数据的首选方法。可以通过配置自己的Content Provider来允许其他应用程序访问,也可以访问其他应用程序提供的Content Provider。安卓设备包含了多个本地的Content Provider来提供有用的数据库,如媒体和联系人信息等。
二.关于安卓的目录结构
src 编写Java代码的目录 遵循Java的命名方法
gen 包含了android的资源文件的标识符 不需要程序员维护 自动生成 不要轻易删除,gen/下面有一个重要的文件R.java,这个文件由系统为一些资源自动生成唯一标识的ID,想象以前的VC中也有类似的文件。R相当于resourse。
assets 原生资源文件
bin 编译后的apk应用程序
libs 第三方类库
res 资源包我们在res/中加入某些资源,例如一个图标,会在gen/下的R.java中生成一个ID,而assets下的资源将不会,需要通过路径来进行访问。res/drawable/中用于存放image,对于图标,提供h,m,l三个分辨率,以适用不同分辨率的设备。
--drawable-XXdpi包含安卓应用中的图片资源文件 按照清晰度分为高清 低清晰度 标清 超高清 非常超高清
--layout 布局文件 完成UI控件的堆放
--menu 菜单 安卓的应用菜单
--values 字符资源文件 通常使用在手机的国际化
AndroidManifest.xml文件(包名 apk版本 apk图片 说明 相关的授权)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.class04"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.class04.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
在这里icon为:@drawable/icon,就是在res/drawable/中名字为icon的image。而@string /app_name,表示在res/values/strings.xml中的定义名字为app_name的字符串,在这个例子中 文"Hello,Andriod"。activity这里表明的activity的执行目标的类名称。
如果我们需要给我们的应用设定用户的许可,例如允许使用GPS,可以加上<uses-permission android:name="android.permission.ACCESS_GPS /">
网络权限
<uses-permission android:name="android.permission.INTERNET"/>
每一个Activity都需要在Andriodmanifest.xml文件进行注册。一个映用有多个Activity,里面的类名".HelloAndriod",注意是有一个".",它和package结合起来就是一个完整的类命。而后面<intent-filter>...</intent-filter>中有android.intent.action.MAIN,表明这是应用启动时需要启动的Activity。
修改新建工程默认布局
D:\android-sdk-windows\tools\templates\activities\BlankActivity\root\res\layout \activity_simple.xml.ftl
三.Activity的生命周期
三种状态:
Resumed
Paused--可能会被系统杀掉 当内存不够时
Stoped--表示现在的activity被另外一个activity完全遮盖
当一个activity处于Paused或者Stoped状态时 可能会被finish掉
七种方法:参见详细图
onCreate 当activity第一次被创建时,你可以创建一个view ,绑定数据
onStart 变成可见的
onResume
onPause 当其他的activity正在运行
onStop
onDestroy
onRestart
onStart
startActivity() 和 startActivityForResult()
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。貌似启动 Activity 的只有 startActivity() 和 startActivityForResult(),之前只学会了前者能初始化一个Bundle,但用起来发现不对劲。用startActivity启动 主界面是一个新的Intent实例,那个我要去访问的主界面还在activity栈的下面没有调出来,而且这样做的一个最大的问题是,回不到原界面就不能多个子功能模块共同来给主界面提供数据或服务了。
解析代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//必须位于程序的第一行 主要用来加载xml的布局 系统会编译成View的对象
setContentView(R.layout.activity_main);
Log.i(TAG,"--onCreate 方法-->>");
}
任何一个View都有一个整型的ID来相关联
到时候可以通过id来初始化相关按钮 达到一一对应
常见开发步骤
1.画布局
2.通过R文件中的id来查找xml对象
Button button = (Button) findViewById(R.id.button1);
3.绑定事件
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(MainActivity.this,NextActivity.class);
String a = editText1.getText().toString().trim();
String b = editText2.getText().toString().trim();
intent.putExtra("msg", a+"+"+b+"="+"?");
startActivityForResult(intent, 1000);
}
});
四.布局
--LinearLayout 线性布局
在LinearLayout里面的空间,按照水平或者垂直排列:
orientation=“horizontal”---水平排列; orientation=“vertical”---垂直排列
当LinearLayout 是horizontal ,并且里面的控件使用了layout_width="fill_parent" ,第二组控件会挡在屏幕的右边,那也就看不到了。
--AbsoluteLayout 绝对布局
是一个按照绝对坐标定义的布局,由于使用绝对坐标去定位控件,因此要实现自适应界面时,应尽少使用 AbsoluteLayout 。 AbsoluteLayout 里面的控件都以layout_x 、layout_y 来定义其位置
--RelativeLayout 相对布局
是一个按照相对位置排列的布局,跟AbsoluteLayout这个绝对坐标布局是个相反的理解
--FrameLayout 帧布局
顾名思义跟帧有关,布局里所有的控件都被放到布局的左上角,并且一层覆盖一层
--TableLayout 表格布局
--GridView
布局和布局之间不要嵌套太对 一般不要超过三层
--GalleyView 画廊
Android:layout_gravity:表示子元素位于父元素的垂直位置
Android:gravity 里面的内容居中(子元素,控件内部的元素)
Android:layout_weight: “1” 权重 越大占的比例越大
Android:layout_marginLeft:
Android:layout_margin: 以左上角为原点
Android:paddingTop:”1dp“ 内边距 带文字的
Android:hint
控件大小用 ---- dp 文字大小 ---- sp
AlertDialog
* setIcon :为对话框设置图标
* setMessage:为对话框设置内容
* setView : 给对话框设置自定义样式
* setItems :设置对话框要显示的一个list,一般用于显示几个命令时
* setMultiChoiceItems :用来设置对话框显示一系列的复选框
* setNeutralButton :普通按钮
* setPositiveButton :给对话框添加"Yes"按钮
* setNegativeButton :对话框添加"No"按钮
* create : 创建对话框
* show :显示对话框
PopupWindow
PopupWindow在android.widget包下,弹出窗口的形式展示。官方文档对该控件的描述是:“一个弹出窗口控件,可以用来显示任意视图 (View),而且会浮动在当前 活动(activity)的顶部”。PopupWindow可以让我们实现多种自定义控件,例如:menu、alertdialog等弹窗似的View。
TabHost,TabWidget
TabHost控件->TabWidget(必须命名为tabs)->FrameLayout(必须命名为tabcontent)。
Style 与 Theme
Button
RadioButton
Switches
ScrollView
ScrollView里面只能有线性布局 其他可以加到线性布局里面
五.Adapter适配器
适配器是adapterView和数据源之间的桥梁
它可以帮我们创造一个view 数据可以来源于网络或者数据库
为每一条数据创建一个可以展现数据的控件
ArrayAdapter 数组
CursorAdapter 使用数据库
Android请求本地服务器时不能使用localhost和127.0.0.1,因为它会把模拟器当本机,需要使用10.0.2.2
六.网络与线程
使用httpPost提交请求
HttpClient httpClient = new DefaultHttpClient();
UrlEncodedFormEntity 纯文本表单提交 不包含文件
UI控件
Android线程
UI主线程
1.不要阻塞UI线程
2.不要UI以外的线程中
两种机制
不要在UI主线程中访问网路
使用AsyncTask
允许使用异步的工作在UI上,可能是一个阻塞的操作,可以把结果发布给UI
申明一个类继承AsyncTask 并且实现一个doInbackground()方法,通过这个方法把结果传递给UI.
三个参数
Params 传递的参数
Progress 进度条
Result 返回的结果
四个步骤 不要手动调用这四个方法
1.onPreExecute 执行异步任务之前
2.doInBackground 后台执行,调用publishProgress把值传到第三个方法
3.onProgressUpdate
4.onPostExecute 更新UI
七. 其它
Dialog
AlertDialog 警告框
触发事件的几种方式
1.匿名内部类:
button.setOnclickListener(new View.OnClickListener{
});
2.实现接口
通过xml定义ui控件
View layout = LayoutInflater.from(MainActivity.this).inflate(R.layout.toast,null);
TextView textView = (TextView )layout.findViewById(R.id.x);
Android基本概念总结的更多相关文章
- Arcgis Android 基本概念 - 浅谈
MapView MapView 是 Android 中 ViewGroup的子类,也是 ArcGIS Runtime SDK for Android 中的地图容器,与很多 ArcGIS API ...
- Android 基础概念了解
Android 的前世今生Android 系统框架Android 主要组成 部分Android 常用的操作 Android 的前世今生 Android 的诞生 2003年10月,有"Andr ...
- android 存储概念
首先,我们得知道android中有内部存储(与内存要区分开来)和外部存储. 内部存储容量较小,尽量少使用,sqlite及SharePreference的数据均在内部存储当中. Log.i(" ...
- android dev概念快速入门
apk: android将源代码依赖库等经过编译后打包分发的应用. 打包详细过程如下: android-studio安装 由于google被qiang,需要制定proxy,可以使用sock,同时安装完 ...
- android 事件处理概念簇
1)事件传递函数 2)事件相关: 事件.事件源.事件监听器.MotionEvent 3)坐标系.定位.路由: 4)Window activity view viewGroup
- Android核心分析 之二方法论探讨之概念空间篇
方法论探讨之概念空间篇 我们潜意识就不想用计算机的方式来思考问题,我们有自己的思维描述方式,越是接近我们思维描述方式,我们越容易接受和使用.各种计算机语言,建模工具,不外乎就是建立一个更接近人的思维方 ...
- 深入理解 Android 之 View 的绘制流程
概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...
- 阿里技术协会好文推荐:Android绘制流程http://click.aliyun.com/m/8719/
一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL.Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
随机推荐
- bzoj 2037: [Sdoi2008]Sue的小球——dp
Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩 ...
- 数据分析之CE找数据大法
一.基本介绍 CE的全称为Cheat Engine,是一款内存修改编辑工具,其官网是http://www.cheatengine.org,可以在其官网下载到最新的CE工具,目前最新版本是Cheat E ...
- Bazinga(HDU5510+KMP)
t题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题目: 题意:找到一个编号最大的字符串满足:存在一个编号比它小的字符串不是它的字串. 思路:K ...
- Fire! (双bfs+预处理)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- bzoj 1296 DP
对于每一行做DP预处理,w[i][j]代表这一行前i个刷j次的最大价值,那么w[i][j]=max(w[i][j],w[k][j-1]+sum[k+1][i]),sum[i][j]为i-j段刷一次最多 ...
- windows+nexus+maven环境搭建(转)
windows nexus环境搭建 1.下载nexus 版本为 nexus-2.11.4-01-bundle 下载地址 这里写链接内容 2.将下载好的文件放到D盘进行解压 3.解压后目录结构 nexu ...
- Eudyptula Challenge
http://www.eudyptula-challenge.org/ The Eudyptula Challenge What is it? The Eudyptula Challenge is a ...
- python基础===解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX(转载)
本文转自:解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX 从网上抓了一些字 ...
- Redis在CentOS 7上的安装部署
简介: Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集( ...
- 关于JqueryEasyUI插件—Tab,默认选中某个面板 如果不明显指定的话,第一个就是被选中的
如果不明显指定的话,第一个就是被选中的,你可以通过data-options="selected:true"指定默认选中