android开发3:四大基本组件的介绍与生命周期

Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器,。

生命周期

是指进程周期 – 创建到结束的过程

进程类别

前台进程:当前正在前台运行的进程
可见进程:显示在前台中,但用户并未在和其进行交互
服务进程:为用户提供服务的进程
后台进程
空进程:该进程一般是为了缓存机制而存在的
 

组件介绍

Activity(表现层)

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity利用View来实现应用中的GUI(用户直接通过GUI和应用程序 做交互)。Activity窗口内的可见内容通过基类View提供。使用Activity.setContentView()方法设置当前 Activity中的View对象。 
每个View对象控制着窗口内的一个矩形空间; 
View是一种层次化结构,Parent View中的布局属性会被子View继承; 
位于View层次关系最底层的子View对象所代表的矩形空间就是跟用户进行交互的地方 
Activity的生命状态依次为: 
onCreate 
onStart 
onRestart 
onResume 
onPause 
onStop 
onDestroy 
=================================================================
如果要保存页面中一些数据的话,要在onPause()中保存,在onResume()中读取。
在 android 中,Activity 的生命周期交给系统统一管理。
=================================================================
Activity共有四种加载模式:
1. standard
        模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
2. singleTop
        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中
         已经存在该Activity实例,只要不在栈顶,都会创建实例)。
3. singleTask
        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到
        栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 
4. singleInstance
        在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实
例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,
不管谁激活该Activity都会进入同一个应用中。
 

自定义View在Activity中的显示步骤:

1、新建类,并集成自View类
2、重写View中的绘制方法onDraw()
3、新建类,集成自Activity类
4、重写onCreate(),初始化自定义的View,然后将用户界面设置成此View对象
吐槽1:啃爹的百度视频教程,教程里面演示运行一切Ok,我本地试了N此,用模拟器运行到时候总是提示Unfortunately,Activity has stopped。
最终google找到问题:没有new Paint()
此例没有使用XML布局,XML目录百度吧,很多,基本大同小异。后续在更新
新建MyView类继承View类:
  1. package com.example.lesson1_helloandroid;
  2. import android.content.Context;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.Paint;
  6. import android.view.View;
  7. /**
  8. * 这个是自定义的MyView.
  9. * 至少需要重载构造方法和onDraw方法
  10. * 对于自定义的View如果没有自己独特的属性,可以直接在xml文件中使用就可以了
  11. * 如果含有自己独特的属性,那么就需要在构造函数中获取属性文件attrs.xml中自定义属性的名称
  12. * 并根据需要设定默认值,放在在xml文件中没有定义。
  13. * 如果使用自定义属性,那么在应用xml文件中需要加上新的schemas,
  14. * 比如这里是xmlns:my="http://schemas.android.com/apk/res/demo.view.my"
  15. * 其中xmlns后的“my”是自定义的属性的前缀,res后的是我们自定义View所在的包
  16. * @author Administrator
  17. *
  18. */
  19. public class MyView extends View{
  20. //设置画笔
  21. Paint paint;
  22. //构造函数
  23. public MyView(Context context) {
  24. super(context);
  25. // TODO Auto-generated constructor stub
  26. paint = new Paint();
  27. //设置颜色 字体大小 等
  28. paint.setColor(Color.WHITE);
  29. paint.setTextSize(20);
  30. paint.setAntiAlias(true);
  31. }
  32.  
  33. protected void onDraw(Canvas canvas){
  34. //自定义界面绘制一个矩形框,在矩形框绘制一段文字
  35. super.onDraw(canvas);
  36. //定义画布背景颜色
  37. canvas.drawColor(Color.BLUE);
  38. //画布上绘制矩形框
  39. canvas.drawRect(10,10,110,110, paint);
  40. //在矩形框上通过画笔绘制了文字
  41. canvas.drawText("你妹的屌丝", 60, 170, paint);
  42. }
  43. }

===================================================通过xml布局显示(未测试,不过思路大致是这样)======================================

相应的属性文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <declare-styleable name="MyView">
  4. <attr name="textColor" format="color"/>
  5. <attr name="textSize" format="dimension"/>
  6. </declare-styleable>
  7. </resources>

在布局文件中使用:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:my="http://schemas.android.com/apk/res/demo.view.my"
  4. android:orientation="vertical"
  5. android:layout_width="fill_parent"
  6. android:layout_height="fill_parent"
  7. >
  8.  
  9. <demo.view.my.MyView
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. my:textColor="#FFFFFFFF"
  13. my:textSize="22dp"
  14. />
  15. </LinearLayout>
=============================================================================================================

 

Activity类:

  1. package com.example.lesson1_helloandroid;//表示的是这个包的名称
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;//是一个活动包,每一个android活动都需要继承Activity类
  5. import android.view.Menu;//
  6.  
  7. public class Lesson1_HelloAndroid extends Activity {
  8.  
  9. @Override
  10. //onCreate 是一个重载函数,在这个函数中实现应用程序创建的所执行的过程。
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. //设置当前的视图(View)
  14. //设置的方法是使用一个文件,这个文件因此决定了视图中包含的内容。
  15. //当前设置表示从res/layout/目录中使用activity_lesson1_hello_android.xml文件
  16. //setContentView(R.layout.activity_lesson1__hello_android);
  17. MyView myview = new MyView(this);
  18. this.setContentView(myview);
  19. }
  20.  
  21. @Override
  22. public boolean onCreateOptionsMenu(Menu menu) {
  23. // Inflate the menu; this adds items to the action bar if it is present.
  24. getMenuInflater().inflate(R.menu.lesson1__hello_android, menu);
  25. return true;
  26. }
  27.  
  28. }

AndroidManifest.xml(注:好像给不给权限都可以运行,默认就可以了,俺是因为一直报错就加了权限。。。。不过最终问题还是因为啃爹的录视频没有new Paint())

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.test"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="18"
  9. android:targetSdkVersion="18" />
  10.  
  11. <application
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <activity
  17. android:name="com.example.test.MainActivity"
  18. android:label="@string/app_name" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21.  
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. </application>
  26.  
  27. </manifest>

运行结果:

 

Service服务(较长生命周期但没有用户界面的程序):

 

启动一个新的服务,或者向一个已有的服务传递新的指令,可以调用如下两种方法:

1.Context.startService()
2.Context.bindService()

Broadcast Receiver服务

发送广播Intent(所有已注册的拥有与之相匹配IntenFilter的BroadcastReceiv就会被激活),可以调用如下三种方法:

1.Context.sendBroadcast()

2.Context.sendOrderBroadcast()

3.Context.sendStickBroadcast()

Intent一旦发出,Android都会准 确找到相匹配的一个或多个Activity、Service或BroadcastReceiver作响 应。所以,不同类型的Intent消息不会出现重叠,BroadcastIntent消息只会发送给BroadcastReceiver,而绝不可能发送 给Activity或Server。有startActivity()传递的消息也只可能发送给Activity,由startService()传递的 Intent只可能发送给Service。

 
 
待续…..
 

android开发3:四大基本组件的介绍与生命周期的更多相关文章

  1. android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:[lxk_1993的博客]: 首先还是先介绍下Activity ...

  2. Android开发艺术探索读书笔记——01 Activity的生命周期

    http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...

  3. Android开发艺术探索(一)——Activity的生命周期和启动模式

    Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被 ...

  4. Android四大基本组件介绍与生命周期

    Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...

  5. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  6. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  7. Spring注解开发-全面解析常用注解使用方法之生命周期

    本文github位置:https://github.com/WillVi/Spring-Annotation/ 往期文章:Spring注解开发-全面解析常用注解使用方法之组件注册 bean生命周期 ​ ...

  8. React Native组件的结构和生命周期

    React Native组件的结构和生命周期 一.组件的结构 1.导入引用 可以理解为C++编程中的头文件. 导入引用包括导入react native定义的组件.API,以及自定义的组件. 1.1 导 ...

  9. .Net组件程序设计之对象生命周期

    .Net组件程序设计之对象生命周期 .NET 垃圾回收 IDisposable() Using语句 .NET 垃圾回收 是CLR管理着垃圾回收器,垃圾回收器监控着托管堆,而我们使用的对象以及系统启动是 ...

随机推荐

  1. TCP粘包的拆包处理

    因为TCP是流式处理的,所以包没有边界,必须设计一个包头,里面表示包的长度(一般用字节表示),根据这个来逐个拆包.如果对于发送/接收频率不高的话,一般也就不做拆包处理了,因为不大可能有粘包现象. 以下 ...

  2. 【转】Linux中断处理学习笔记

    原文网址:http://www.cnblogs.com/GT_Andy/archive/2011/06/21/2086100.html 1.Linux中断的注册与释放: 在<linux/inte ...

  3. iOS 9之应用内搜索(CoreSpotlight)API

    金田(github 示例源码) 前言 在iOS9之前我们只能使用Spotlight来搜索应用名称来打开指定App,而其他的内容都是提供给系统使用(信息,联系人,邮件等).在iOS9以后Apple允许开 ...

  4. Android 查看是否有存储卡插入

    String status=Environment.getExternalStorageState(); 2   3 if ( status.equals ( Enviroment.MEDIA_MOU ...

  5. Android ViewPager实现软件的第一次加载的滑动效果

    public class MainActivity extends Activity { private ViewPager viewPager; private List<View> V ...

  6. Git分支学习总结

    思维导图:        总结:        Git分支:分为2类合计为5种分支.        第一类:主分支和开发分支.        第二类:特性分支,热补丁分支,版本分支.

  7. ORACLE_CLASS_ENDING

    [JSU]LJDragon's Oracle course notes In the first semester, junior year Oracle考前复习 试题结构分析: 1.选择题2x10, ...

  8. Struts 2零配置

    从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该 ...

  9. Android在跳转市场进行评分问题总结

    原本以为应用评分是个很小的功能,但是一实现才发现真不是个小事.网上搜索资料没有找到答案,在很多开发群里面询问了很多人也没有解决问题,最后分析log,反编译看源码才终于有了些眉目,好吧,上代码: 1 t ...

  10. AIX-du

    du命令显示用于文件的块的数量.如果指定的File参数实际上是一个目录,就要报告该目录内的所有文件.如果没有提供 File参数,du命令使用当前目录内的文件.如果File参数是一个目录,那么报告的块的 ...