android官网文档学习笔记
1、android的四大组件的了大概功能
activity:负责显示界面,和用户交互。
service:运行在后台。
content provider:为程序app之间的数据访问提供接口。
broadcast:广播
2、组件的激活
activity、service、broadcast都是通过intent激动的。
启动activity:
你可以启动一个activity(或者让让它来做一些新的工作)通过传递一个Intent给startActivity() 或者 startActivityForResult() (当你想让一个activity为你返回一个结果)。 Intent intent = new Intent(XskpActivity.this,
XsSpmlActivity.class);
startActivityForResult(intent, REQUEST_CXSPML);
//从loginActivity界面跳到homeActivity界面
Intent intent = new Intent();
intent.setClass(LoginActivity.this, HomeActivity.class); // 描述起点和目标
startActivity(intent);
启动service:
用startService或是bindService
启动broadcast
用sendBroadcast,sendOrderedBroadcast,或是sendStickyBroadcast
3、配置文件AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture /> <application> <activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity> <activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias> <service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service> <receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver> <provider>
<grant-uri-permission />
<meta-data />
</provider> <uses-library /> </application> </manifest>
所有的组件:activity,service,broadcast,contentprovider必须在这个文件里面声明。
声明程序要获得的权限
声明程序正常运行的配置要求:包括api的要求,配置组件要求
4、activity的使用
4.1、创建activity
1)通过创建activity的子类来创建,在类里面的onCreate()方法里通过调用setContentView()并转入布局文件xml的id来设置程序activity的UI。
2)activity的布局用xml文件来实现,也可以在代码里自己写布局
3)在androidManifest.xml文件里配置activity,不声明就访问不了
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
4.2、启动activity
1)简单启动自己程序里另一个activity
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);
在intent里写明要启动的activity名字就可以了
2)启动其它程序的activity
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
在intent里描述要启动的activity的条件,满足这些条件的程序会自动启动,如果程序不止一个,系统会让用户选择运行哪个程序。
4.3、启动一个带返回结果的activity
1)只要用startActivityForResult()方法代码startActivity()就行
2)在本activity里实现onActivityResult()回调方法来获取返回的结果。
private void pickContact() {
// Create an intent to "pick" a contact, as defined by the content provider URI
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// If the request went well (OK) and the request was PICK_CONTACT_REQUEST
if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
// Perform a query to the contact's content provider for the contact's name
Cursor cursor = getContentResolver().query(data.getData(),
new String[] {Contacts.DISPLAY_NAME}, null, null, null);
if (cursor.moveToFirst()) { // True if the cursor is not empty
int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String name = cursor.getString(columnIndex);
// Do something with the selected contact's name...
}
}
}
4.4、关闭activity
用finish()或finishActivity(),但一般要关闭activity,关闭后用户就不能返回到这个activity了,一般都是交能系统去关闭,手动关闭后影响了用户的体验。
4.5、管理activity的生命周期
1)生命周期有:
resumed:activity在前台,有焦点
paused:activity被其它的activity挡住了,没有了焦点,但本身还是可见的。
stop:activity完全被其它的activity覆盖
2)实现生命周期回调方法
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
}
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now "resumed").
}
@Override
protected void onPause() {
super.onPause();
// Another activity is taking focus (this activity is about to be "paused").
}
@Override
protected void onStop() {
super.onStop();
// The activity is no longer visible (it is now "stopped")
}
@Override
protected void onDestroy() {
super.onDestroy();
// The activity is about to be destroyed.
}
}
一般要在onCreate方法里实现activity布局和创建资源,在onDestroy()方法里进行资源的释放。
3)生命周期图和表
方法 | 描述 | 之后可否被杀死? | 下一个方法 |
---|---|---|---|
onCreate() | activity第一次被创建时调用。在这里你应该完成所有常见的静态设置工作——创建view、绑定list数据等等。 本方法传入一个包含了该activity前一个状态的Bundle对象(如果之前已捕获了状态的话,详见后面的保存Activity状态)。
下一个回调方法总是onStart()。 |
否 | onStart() |
onRestart() | activity被停止后、又再次被启动之前调用。
下一个回调方法总是onStart() |
否 | onStart() |
onStart() | activity要显示给用户之前调用。
如果activity进入前台,则下一个回调方法是onResume();如果进入隐藏状态,则下一个回调方法是onStop()。 |
否 | onResume() 或 onStop() |
onResume() | activity开始与用户交互之前调用。这时activity是在activity栈的顶端,用户可以向其中输入。
下一个回调方法总是onPause()。 |
否 | onPause() |
onPause() | 当系统准备启动另一个正在恢复的activity时调用。这个方法通常用于把未保存的改动提交为永久数据、停止动画播放、以及其它可能消耗CPU的工作等等。 它应该非常迅速地完成工作,因为下一个activity在本方法返回前是不会被恢复运行的。
如果activity返回前台,则下一个回调方法是onResume();如果进入用户不可见状态,则下一个是onStop() |
可以 | onResume() 或 onStop() |
onStop() | 当activity不再对用户可见时调用。原因可能是它即将被销毁、或者其它activity(已有或新建的)被恢复运行并要覆盖本activity。
如果activity还会回来与用户交互,则下一个回调方法是onRestart();如果这个activity即将消失,则下一个回调方法是onDestroy() |
可以 | onRestart() 或 onDestroy() |
onDestroy() | 在本activity被销毁前调用。这是activity收到的最后一个调用。 可能是因为activity完成了工作(有些人在这里调用finish()), 也可能是因为系统为了腾出空间而临时销毁activity的本实例。 可以利用isFinishing() 方法来区分这两种情况。 | 可以 | 无 |
4.6、保存activity状态(待学)
4.7、多activity的合作(待学)
5、fragments(待学)
6、stacks和back stack(待学)
android官网文档学习笔记的更多相关文章
- Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6
3.4.3 使用depends-on 使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用","." ...
- Spring3.0官网文档学习笔记(一)
Part 1 Spring框架概述 Spring是模块化的,在应用中仅仅须要引入你所须要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web ser ...
- Spring3.0官网文档学习笔记(七)--3.4.2
3.4.2 依赖与配置的细节 3.4.2.1 Straight values (primitives, Strings, and so on) JavaBeans PropertyE ...
- Spring3.0官网文档学习笔记(二)
1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包) spring-*.jar *号代表 ...
- Spring3.0官网文档学习笔记(四)--3.1~3.2.3
3.1 Spring IoC容器与Beans简单介绍 BeanFactory接口提供对随意对象的配置: ApplicationContext是BeanFactory的子接口.整合了Sp ...
- Spring Security 官网文档学习
文章目录 通过`maven`向普通的`WEB`项目中引入`spring security` 配置 `spring security` `configure(HttpSecurity)` 方法 自定义U ...
- mongodb官网文档阅读笔记:与写性能相关的几个因素
Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...
- (五)Spring Boot官网文档学习
文章目录 SpringApplication SpringApplication 事件 `ApplicationContext ` 类型 访问传递给 `SpringApplication` 的参数 A ...
- (四)Spring Boot官网文档学习
文章目录 关于默认包的问题 加载启动类 配置 Bean管理和依赖注入 @SpringBootApplication Developer Tools 关于 Developer Tools 的一些细节 原 ...
随机推荐
- 从开源项目看 Python 单元测试
我觉得以前在我开发程序的时候,除了文档,可能单元测试是另外一个让我希望别人都写,但是自己又一点都不想写的东西.但是,随着开发程序的增多,以及自己对 Bug 的修改的增多,我发现,UT 在很大程度上是对 ...
- 【C语言】统计数组中出现次数超过一半的数字
//统计数组中出现次数超过一半的数字 #include <stdio.h> int Find(int *arr, int len) { int num = 0; //当前数字 int ti ...
- gcc 源代码分析-前端篇3
3. GCC怎样函表示一个函数 对c语言来说.函数是其核心,全部的东西都在环绕着函数在转.对于一个函数来说.它基本的一些特性例如以下: 1. 有一个返回值,在这里我们没有把返回值的函数觉得它 ...
- JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档
作者: zyl910 [TOC] 一.缘由 由于在ES6之前,JavaScript中没有定义类(class)语法.导致大家用各种五花八门的办法来定义类,代码风格不统一.而且对于模拟面向对象的三大支柱& ...
- Express4.x API (一):application (译)
Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 完成 Express4.x API (二):request (译) -- 完成 ...
- weka 通过普通文本转化成arff文件
这个问题来源于我要用weka这个数据挖掘工具,测试时发现我们新建txt文件,输入内容,然后直接改后缀. 这样生成的arff文件不能打开. 究其原因是编码的问题,正确处理方法如下: 新建文本,然后用no ...
- 机器学习笔记2 – sklearn之iris数据集
前言 本篇我会使用scikit-learn这个开源机器学习库来对iris数据集进行分类练习. 我将分别使用两种不同的scikit-learn内置算法--Decision Tree(决策树)和kNN(邻 ...
- JavaScript操作符(一元操作符)
JavaScript操作符包括算术操作符.位操作符.关系操作符和相等操作符.只能操作一个值的操作符叫做一元操作符. 递增和递减操作符 递增和递减操作符有两个版本:前置型和后置型.前置型操作符位于要操作 ...
- 有关Ajax跨域请求的解决方案
前言 最近博主在赶项目进度.所以微信二次开发那边的博文一直没有更新.后续时间会慢慢记录这个学习历程的.来年公司要开发微信小程序.到时也会记录一下历程. 闲话少说,今天在工作中遇到了SpringMVC接 ...
- 为 Azure IoT Edge 设备部署 Azure Stream Analytics 服务
在前面的两篇文章<Azure IoT Edge on Windows 10 IoT Core>和<Azure IoT Edge on Raspberry Pi 3 with Rasp ...