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基本概念总结的更多相关文章

  1. Arcgis Android 基本概念 - 浅谈

    MapView     MapView 是 Android 中 ViewGroup的子类,也是 ArcGIS Runtime SDK for Android 中的地图容器,与很多 ArcGIS API ...

  2. Android 基础概念了解

    Android 的前世今生Android 系统框架Android 主要组成 部分Android 常用的操作 Android 的前世今生 Android 的诞生 2003年10月,有"Andr ...

  3. android 存储概念

    首先,我们得知道android中有内部存储(与内存要区分开来)和外部存储. 内部存储容量较小,尽量少使用,sqlite及SharePreference的数据均在内部存储当中. Log.i(" ...

  4. android dev概念快速入门

    apk: android将源代码依赖库等经过编译后打包分发的应用. 打包详细过程如下: android-studio安装 由于google被qiang,需要制定proxy,可以使用sock,同时安装完 ...

  5. android 事件处理概念簇

    1)事件传递函数 2)事件相关: 事件.事件源.事件监听器.MotionEvent 3)坐标系.定位.路由: 4)Window activity view viewGroup

  6. Android核心分析 之二方法论探讨之概念空间篇

    方法论探讨之概念空间篇 我们潜意识就不想用计算机的方式来思考问题,我们有自己的思维描述方式,越是接近我们思维描述方式,我们越容易接受和使用.各种计算机语言,建模工具,不外乎就是建立一个更接近人的思维方 ...

  7. 深入理解 Android 之 View 的绘制流程

    概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...

  8. 阿里技术协会好文推荐:Android绘制流程http://click.aliyun.com/m/8719/

    一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL.Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...

  9. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

随机推荐

  1. 【BZOJ4516】【SDOI2016】生成魔咒 [SAM]

    生成魔咒 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 魔咒串由许多魔咒字符组成,魔咒字符 ...

  2. Everything Has Changed(HDU6354+圆交+求周长)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6354 题目: 题意:用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长( ...

  3. 边缘检测:Canny算子,Sobel算子,Laplace算子

    1.canny算子 Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法.更为重要的是 Canny 创立了边缘检测计算理论(Computational the ...

  4. Git 常用命令(二)

    用 git init 在目录中创建新的 Git 仓库.  $ mkdir test $ cd test/ $ git init Initialized empty Git repository in ...

  5. Problems with Ribbon/Feign/Zuul retry

    原文 https://github.com/spring-cloud/spring-cloud-netflix/issues/1577 I'm using Spring Cloud Camden SR ...

  6. nodejs安装express以后,使用express显示不是内部或外部命令

    1.问题描述 在命令窗口通过npm install -g express 安装express以后,通过express -e express新建工程失败,提示express不是内部或外部命令 2.解决方 ...

  7. python中正则用法举例

    一.根据正则表达式替换字符串 import re text='abc123' text=re.sub(r'\d','-',text) print(text) 输出:abc---将每个数字替换为-,如果 ...

  8. perl中设置POST登录时的重定向

    默认地, perl提交post登录时是不会重定向的 要让它重定向, 可以用如下方法: my $cookie = HTTP::Cookies->new(); push @{$ua->requ ...

  9. 5-3 Linux内核计时、延时函数与内核定时器【转】

    转自:http://www.xuebuyuan.com/510594.html 5-3 Linux内核计时.延时函数与内核定时器 计时 1. 内核时钟 1.1   内核通过定时器(timer)中断来跟 ...

  10. 单从软件层面来说,Maya 和 Blender 差别在哪?

    单从软件层面来说,Maya 和 Blender 差别在哪? https://www.zhihu.com/question/21975571