大话企业级android读书笔记(二)

Android的四大组件

android的管理员:Activity

用户想在屏幕上做什么,怎么处理用户做出不同的操作都由该Activity来管理和调度。

所有有用户操作类都必须继承自Activity

比如想处理按键按下事件

@Override

public boolean onKeyDown(int keyCode,KeyEvent event){

  //处理按键按下事件

}

如果一个活动被暂停或停止,系统可以将它从内存移除,通过要求它结束(通过调用它的finish()方法),或简单地杀掉它的进程。当它再次显示给用户时,必须要完全重新启动和恢复到之前的状态。随着活动从一个状态转为另一个状态,通过调用下面的受保护的方法通知该改变:

  • void onCreate(Bundle saveInstanceState)
  • void onStart()
  • void onRestart()
  • void onResume()
  • void onPause()
  • void onStop()
  • void onDestroy()

所有这些方法都是钩子,你可以重写当状态改变时做适当的工作。所有的活动必须要实现onCreate()去做一些初始化的设置,当对象第一次实例化的时候。很多活动也会实现onPause()去提交数据修改或准备停止与用户交互。

将他们合并在一起,这七个方法定义了活动的整个生命周期。有三个嵌套的循环,你可以通过这七个方法监视:

  • 活动的整个生命时间,从第一次调用onCreate()开始直到调用onDestroy()结束。一个活动在onCreate()中做所有的“全局”状态的初始设置,在onDestroy()中释放所有保留的资源。举例来说,有一个线程运行在后台从网络上下载数据,它可能会在onCreate()中创建线程,在onDestroy()中结束线程。
  • 活动的可视生命时间,从调用onStart()到相应的调用onStop() 。在这期间,用户可以在屏幕上看见活动,虽然它可能不是运行在前台且与用户交互。在这两个方法之间,你可以保持显示活动所需要的资源。举例来说,你可以在onStart()中注册一个广播接收者监视影响你的UI的改变,在onStop() 中注销。因为活动在可视和隐藏之间来回切换,onStart()和onStop() 可以调用多次。
  • 活动的前台生命时间,从调用onResume()到相应的调用onPause()。在这期间,频繁地在重用和暂停状态转换——例如,当设备进入睡眠状态或一个新的活动启动时调用onPause(),当一个活动返回或一个新的意图被传输时调用onResume()。因此,这两个方法的代码应当是相当轻量级的。

下面这个图解释了这三个循环和状态之间状态的可能路径。着色的椭圆表示活动的主要状态,矩形表示当活动在状态之间转换时你可以执行的回调方法。


图1、活动生命周期(来源:Android SDK)

下面的表格对每个方法更详细的描述和在活动的整个生命周期中的定位。


注意上面表格的Killable列,它表示当方法返回时没有执行活动的其它代码,系统是否能杀死活动寄宿的进程。三个方法(onPause()、onStop()、onDestroy())标记为Yes。因为onPause()是唯一一个保证在进程被杀之前会调用的,因此你应该使用onPause()来写任何持久化存储数据。

被标记为No的方法保护活动寄宿的进程在他们调用的时候不会被杀掉。因此活动是可杀掉状态,例如onPause()返回到onResume()调用期间。直到onPause()再次返回,活动是不可杀掉的。其实,没有标记为Killable的活动也是可以系统被杀掉的,不过这仅仅发生在极端困难的情况下,没有有任何其他资源可用。

1.通过intent来传递:

  A.传字符等:activity1中设置:

  Java代码

  String text = "hello";

  Intent intent1 = new Intent(ActivityMain.this, Activity2.class);

  intent1.putExtra("activity1", text);

  startActivity(intent1 );

  String text = "hello";

  Intent intent1 = new Intent(ActivityMain.this, Activity2.class);

  intent1.putExtra("activity1", text);

  startActivity(intent1 );

  B.传对象,对象要实例化,继承Serializable

  Java代码

  Bundle mbundle=new Bundle(); mbundle.putSerializable("user",userList.get(position));

  Intent in =new Intent (getApplicationContext(), activity2.class);

  in.putExtras(mbundle);

  startActivity(in);

  Bundle mbundle=new Bundle(); mbundle.putSerializable("user",userList.get(position));

  Intent in =new Intent (getApplicationContext(), activity2.class);

  in.putExtras(mbundle);

  startActivity(in);

  activity2中接收:

  A:接收

  Java代码

  Bundle extras = getIntent().getExtras();

  if (extras != null) {

  textview.setText(extras.getString("activity1"));

  }

  Bundle extras = getIntent().getExtras();

  if (extras != null) {

  textview.setText(extras.getString("activity1"));

  }

  B.接收

  Java代码

  Bundle bundel = getIntent().getExtras();

  user= (User) bundel.get("user");

  Bundle bundel = getIntent().getExtras();

  user= (User) bundel.get("user");

  2.SharedPreferences

  我在activity1中设置的如下:

  Java代码

  SharedPreferences sp =getSharedPreferences("textinfo",0);

  Editor editor=sp.edit();

  String text = "hello";

  editor.putString("text", text);

  editor.commit(); Intent i = new Intent(getApplicationContext(),activity2.class);

  startActivity(i);

  SharedPreferences sp =getSharedPreferences("textinfo",0);

  Editor editor=sp.edit();

  String text = "hello";

  editor.putString("text", text);

  editor.commit();

  Intent i = new Intent(getApplicationContext(),activity2.class);

  startActivity(i);

  跳转到Message的activity,获取内容如下

  Java代码

  SharedPreferences share=getSharedPreferences("textinfo",0);

  String text =share.getString("text", null);

  msgtextview.setText(text);

android的邮递员:Intent

Android基本设计理念是鼓励减少组件间的耦合,因此Android提供了Intent(意图),Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。

用于多个Activity之间互相传递数据。

android的隐形管理员:Service

Service从字面上理解即为“服务”,这里与windows中的服务有点类似。

Service是在后台运行的,没有交互的界面

使用Service的好处是可以同时运行多个任务,而Activity只能运行一个可交互的界面。

startService()和bindService()的区别:startService(),Service是通过接收Intent经历onCreate()和onStart(),当用户在发出意图使之销毁时会经历onDestory(),而bindService()方式启动,在与Activity绑定的时候,会经历onCreate()和onBind()而当Activity被销毁的时候,Service会先调用onUnbind(),然后是onDestory().

android的接收员:BroadcastReceiver

广播接收者用于异步接收广播Intent

广播接收者没有界面,但是接收到消息后可以启动一个Activity,或者可以使用NotifcationManager来通知用户。

时间: 2024-09-03 16:56:06

大话企业级android读书笔记(二)的相关文章

大话企业级android读书笔记(三)

android中的数据存储类型包括:内存,普通文件,Shared Preferences,XML和SQLLite等 文件操作: 包括读写 /** * [文件操作] */ package Iwit.IwitTest; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.

大话企业级android读书笔记(一)

Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备.目前尚未有统一中文名称,中国大陆地区较多人使用安卓(非官方)或安致(官方).Android操作系统最初由Andy Rubin开发,最初主要支持手机.2005年由Google收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上. 2010年末数据显示,仅正式推出两年的操作系统的Android已经超越称霸十年的诺基亚Symbian系统,跃居全球最受欢迎的智能手机平台.Android的主要竞争

《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石

        马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各种技术描述清楚,而且过程中读起来非常有意思.         该读书笔记中参杂了很多原文的知识,因为我实在无法割舍,都挺有意思的:同时记录一些有用的知识,通过这本书能介绍些学过的知识或面试中可能出现的题目及作者所思,文章还是非常有趣的,希望对大家有所帮助! 一. Java时代 脱胎换骨    

asp.net 2.0揭秘读书笔记二:使用Rich控件

Rich控件主要包括: (1)FileUpload控件 (2)Calender控件 (3)Adrotator控件 (4)Multiview控件 (5)Wizard控件 本笔记主要讲了FileUpload控件的简单用法. 1. FileUpload控件用于用户向web应用程序上传文件. (1)把文件保存到文件系统 在FileUpload控件浏览选择好本地要上传的文件后,点击确定按钮进行上传,代码如下所示: protected void Button1_Click(object sender, Ev

Programming Ruby读书笔记(二)

1.再谈ruby数组. class Test a = [1, 3, 5, 7, 9] puts a[0] #----->1 puts a[-2] #----->7 puts a[1, 3] #----->[3, 5, 7] puts a[-3, 2] #----->[5, 7] puts a[1..3] #----->[3, 5, 7] puts a[1...3] #----->[3, 5] a[2] = 'cat' #----->[1, 3, "cat

Android学习笔记(二)之电话拨号器_Android

目前Android已经在只能手机市场已经具有强大的霸主地位,也吸引了越来越多的追捧者.Android的学习也越来越火.但是,报名费用确实大多人望而却步 一.新建项目CallPhone 1.1.建立项目   二.设置界面与项目名称 2.1.更改项目名称 res/values下strings.xml中更改app_name电话拔号器 string.xml <?xml version="1.0" encoding="utf-8"?> <resources&

Android学习笔记(二)之电话拨号器

目前Android已经在只能手机市场已经具有强大的霸主地位,也吸引了越来越多的追捧者.Android的学习也越来越火.但是,报名费用确实大多人望而却步 一.新建项目CallPhone 1.1.建立项目 二.设置界面与项目名称 2.1.更改项目名称 res/values下strings.xml中更改app_name电话拔号器 string.xml <?xml version="1.0" encoding="utf-8"?> <resources>

《C++ primer plus》读书笔记(二)_C 语言

第五章 1.for循环--for(initialization; test-expression; update-expression) body // test-expression 会被转换为bool,0为false,非零为true 2.表达式--表达式是值或值与运算符的组合.赋值表达式的值为其左侧成员的值,而赋值运算符是从右到左结合的. 3.a++和++a-- (1)对于内置类型,两种执行效率相同. (2)若重载运算符,对于类而言,前缀将值加1,返回结果:后缀会复制一个副本,加1后返回副本

《FilthyRichClients》读书笔记(二)-让Swing正确显示Gif

利用gif图片制作简单动画是常用的渲染手段,swing虽然支持gif图片格式并可以自动地实现动画效果. 通常最简单地将gif图片放到swing组件上是调用JButton或JLabel的setIcon(Icon icon)方法. 还有一种方法是重写paintComponent(Graphics g)或paint(Graphics g)方法.例如 public class ShowGifPanel extends JPanel{ ImageIcon image = new ImageIcon("/r