1、android的四大组件的了大概功能

activity:负责显示界面,和用户交互。  

service:运行在后台。

  content provider:为程序app之间的数据访问提供接口。

  broadcast:广播

2、组件的激活

  activity、service、broadcast都是通过intent激动的。

  启动activity:

  1. 你可以启动一个activity(或者让让它来做一些新的工作)通过传递一个IntentstartActivity() 或者 startActivityForResult() (当你想让一个activity为你返回一个结果)。
  2.  
  3. Intent intent = new Intent(XskpActivity.this,
  4. XsSpmlActivity.class);
  5. startActivityForResult(intent, REQUEST_CXSPML);
  6. //从loginActivity界面跳到homeActivity界面
  7. Intent intent = new Intent();
  8. intent.setClass(LoginActivity.this, HomeActivity.class); // 描述起点和目标
  9. startActivity(intent);

启动service:

  用startService或是bindService

  启动broadcast

  用sendBroadcast,sendOrderedBroadcast,或是sendStickyBroadcast

3、配置文件AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <manifest>
  4.  
  5. <uses-permission />
  6. <permission />
  7. <permission-tree />
  8. <permission-group />
  9. <instrumentation />
  10. <uses-sdk />
  11. <uses-configuration />
  12. <uses-feature />
  13. <supports-screens />
  14. <compatible-screens />
  15. <supports-gl-texture />
  16.  
  17. <application>
  18.  
  19. <activity>
  20. <intent-filter>
  21. <action />
  22. <category />
  23. <data />
  24. </intent-filter>
  25. <meta-data />
  26. </activity>
  27.  
  28. <activity-alias>
  29. <intent-filter> . . . </intent-filter>
  30. <meta-data />
  31. </activity-alias>
  32.  
  33. <service>
  34. <intent-filter> . . . </intent-filter>
  35. <meta-data/>
  36. </service>
  37.  
  38. <receiver>
  39. <intent-filter> . . . </intent-filter>
  40. <meta-data />
  41. </receiver>
  42.  
  43. <provider>
  44. <grant-uri-permission />
  45. <meta-data />
  46. </provider>
  47.  
  48. <uses-library />
  49.  
  50. </application>
  51.  
  52. </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,不声明就访问不了

  1. <manifest ... >
  2. <application ... >
  3. <activity android:name=".ExampleActivity" />
  4. ...
  5. </application ... >
  6. ...
  7. </manifest >

  4.2、启动activity

    1)简单启动自己程序里另一个activity

  1. Intent intent = new Intent(this, SignInActivity.class);
  2. startActivity(intent);

      在intent里写明要启动的activity名字就可以了 

   2)启动其它程序的activity

  1. Intent intent = new Intent(Intent.ACTION_SEND);
  2. intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
  3. startActivity(intent);

      在intent里描述要启动的activity的条件,满足这些条件的程序会自动启动,如果程序不止一个,系统会让用户选择运行哪个程序。

  4.3、启动一个带返回结果的activity

      1)只要用startActivityForResult()方法代码startActivity()就行

      2)在本activity里实现onActivityResult()回调方法来获取返回的结果。

  1. private void pickContact() {
  2. // Create an intent to "pick" a contact, as defined by the content provider URI
  3. Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
  4. startActivityForResult(intent, PICK_CONTACT_REQUEST);
  5. }
  6.  
  7. @Override
  8. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  9. // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
  10. if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
  11. // Perform a query to the contact's content provider for the contact's name
  12. Cursor cursor = getContentResolver().query(data.getData(),
  13. new String[] {Contacts.DISPLAY_NAME}, null, null, null);
  14. if (cursor.moveToFirst()) { // True if the cursor is not empty
  15. int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
  16. String name = cursor.getString(columnIndex);
  17. // Do something with the selected contact's name...
  18. }
  19. }
  20. }

  4.4、关闭activity

      用finish()或finishActivity(),但一般要关闭activity,关闭后用户就不能返回到这个activity了,一般都是交能系统去关闭,手动关闭后影响了用户的体验。

  4.5、管理activity的生命周期

      1)生命周期有:

        resumed:activity在前台,有焦点

        paused:activity被其它的activity挡住了,没有了焦点,但本身还是可见的。

        stop:activity完全被其它的activity覆盖

      2)实现生命周期回调方法

  1. public class ExampleActivity extends Activity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. // The activity is being created.
  6. }
  7. @Override
  8. protected void onStart() {
  9. super.onStart();
  10. // The activity is about to become visible.
  11. }
  12. @Override
  13. protected void onResume() {
  14. super.onResume();
  15. // The activity has become visible (it is now "resumed").
  16. }
  17. @Override
  18. protected void onPause() {
  19. super.onPause();
  20. // Another activity is taking focus (this activity is about to be "paused").
  21. }
  22. @Override
  23. protected void onStop() {
  24. super.onStop();
  25. // The activity is no longer visible (it is now "stopped")
  26. }
  27. @Override
  28. protected void onDestroy() {
  29. super.onDestroy();
  30. // The activity is about to be destroyed.
  31. }
  32. }

        一般要在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官网文档学习笔记的更多相关文章

  1. Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6

    3.4.3 使用depends-on     使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用","." ...

  2. Spring3.0官网文档学习笔记(一)

    Part 1 Spring框架概述 Spring是模块化的,在应用中仅仅须要引入你所须要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web ser ...

  3. Spring3.0官网文档学习笔记(七)--3.4.2

    3.4.2 依赖与配置的细节     3.4.2.1  Straight values (primitives, Strings, and so on)     JavaBeans PropertyE ...

  4. Spring3.0官网文档学习笔记(二)

    1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包)     spring-*.jar *号代表 ...

  5. Spring3.0官网文档学习笔记(四)--3.1~3.2.3

    3.1 Spring IoC容器与Beans简单介绍     BeanFactory接口提供对随意对象的配置:     ApplicationContext是BeanFactory的子接口.整合了Sp ...

  6. Spring Security 官网文档学习

    文章目录 通过`maven`向普通的`WEB`项目中引入`spring security` 配置 `spring security` `configure(HttpSecurity)` 方法 自定义U ...

  7. mongodb官网文档阅读笔记:与写性能相关的几个因素

    Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...

  8. (五)Spring Boot官网文档学习

    文章目录 SpringApplication SpringApplication 事件 `ApplicationContext ` 类型 访问传递给 `SpringApplication` 的参数 A ...

  9. (四)Spring Boot官网文档学习

    文章目录 关于默认包的问题 加载启动类 配置 Bean管理和依赖注入 @SpringBootApplication Developer Tools 关于 Developer Tools 的一些细节 原 ...

随机推荐

  1. 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

    Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...

  2. Hibernate常见问题 No row with the given identifier exists问题的解决办法及解决

    (1)在学习Hibernate的时候遇到了这个问题"No row with the given identifier exists"在网上一搜看到非常多人也遇到过这个问题! 问题的 ...

  3. mysql中对字符集和校对规则的认识

    字符集:指符号和字符编码的集合.校对规则:比较字符编码的方式.GBK2312:主要包括简体中文字符及常用符号,对于中文字符采用双字节编码的格式,也就是说一个汉字字符在存储占两个字节.GBK:包括有中. ...

  4. Mybatis中的模糊查询

    今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询. 后来经过搜索 ...

  5. CenOS 6.5下 mysql自动备份

      1.mysql备份命令是mysqldump,自动执行可以用cron,但是文件名需要带有时间标志,shell处理起来很麻烦,我就选择了python来解决 2.文件名用time模块来解决,执行系统命令 ...

  6. Python Web框架

    本节对Python Web框架学习 一.MTVModel: 存放所有数据库相关文件Template:模板文件,存放html文件View: 业务处理,即函数文件 二.MVCmodel: 存放数据库相关文 ...

  7. JAVA 实现tail -f 日志文件监控功能

    工具: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</ar ...

  8. [array] leetcode - 48. Rotate Image - Medium

    leetcode - 48. Rotate Image - Medium descrition You are given an n x n 2D matrix representing an ima ...

  9. 调用CMD命令的一个.NET工具类(MyWindowsCmd)

    功能大概描述一下如果直接StandardOutput.ReadToEnd()这种方法,有很多限制 这类方式必须把命令全部执行一次写入并标记为exit,而且返回内容的获取会一直等待,如果在主线程里使用会 ...

  10. 关于vue 框架与后台框架的混合使用的尝试------转载

    这几天我在研究前台框架和后台框架融合的问题,进行了一些尝试; 我前台选择的是 vue,当然也可以选择 react 等其他 mvvm 框架,不过 vue 对于我来说是最熟悉的; 后台话,我选择的是 ph ...