Android之我当年爬过的坑

学习Android已有一段时间了,每每想起初学Android时的场景,一股心酸油然而生,在这里我将带着大家从基础开始学习Android,带着大家踩踩我当年学习Android所遇到的坑,让大家少走一些弯路。

第一章 Android 基石 – – 四大组件

Android 中最基本的构成即四大组件,分别是Activity(活动)、Service(服务)、ContentProvider(内容提供者)和Broadcast(广播)。他们之间分工明确,相辅相成,共同构成了可重用、灵活、低耦合的Android系统。Activity负责各UI控件的展示和页面的跳转;Service是一个默默无闻的后台工作者,长期隐藏在后台执行一些耗时操作;ContentProvider负责着多个应用之间的数据共享;Broadcast则是在各个组件、应用之间进行通信。接下来我们将一起学习这四大组件。

1、Activity

Activity在应用中的表现便是一个个的用户界面,它会加载指定的UI控件来构成丰富多彩的UI界面,我们可以给每个控件添加事件来处理相应的界面变化,如页面跳转、UI改变等。
APP在启动的时候都会默认加载一个Activity,既APP的启动页,这个启动页需要我们在配置文件进行配置;大家先简单了解一下Android项目的目录结构,以AndroidStudio为例,如下图所示:
Android之我当年爬过的坑_第1张图片

我们想将某个Activity设为启动页,只需要在配置文件(AndroidManifest.xml)中如此设置即可
Android之我当年爬过的坑_第2张图片

1. 1 Activity 生命周期

每个Activity都有生命周期,这些生命周期方法是构成丰富多彩界面所必不可少的一环,其方法有如下几个:

1.1.1 onCreate()

我们在创建完成一个Activity时,都会默认实现这个方法,说明这个方法是Activity所必不可少的生命周期方法,事实上的确如此,这个方法会在Actitivity第一次被创建时执行,在这个方法中完成Activity的初始化工作,如设置布局、初始化视图、绑定事件等。

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         findViewById(R.id.start).setOnClickListener(this);    }

我们来看一下这段代码,我们看看setContentView(R.layout.activity_main)这个方法,这个方法主要是来设置我们的布局文件的,这个Activity长什么样,都有哪些控件,可以静态的在这里设置,当然我们也可以动态的在代码中进行设置,这个后面再说。再看看findViewById(R.id.start).setOnClickListener(this)这个方法,它由两部分组成findViewById(R.id.start)和$$.setOnClickListener(this);第一个方法我们通过布局文件中的控件id找到这个控件,第二个方法是给这个控件设置了一个点击事件,我们大多数的控件都可以进行这样的操作,先通过id找到这个控件,再给这个控件设置事件,Android中一般有setOnClickListener()(点击事件)、setOnLongClickListener()(长按事件)、setOnTouchListener()(触摸事件)等比较常用事件,我们在设置事件后就可以在事件的实现方法中做我们的逻辑操作了。

1.1.2 onStart()

这个方法在onCreate()之后被调用,此时Activity刚被创建,处于不可见的状态,它是创建到可见的一个中间状态,比如我们Activity退居后台,再次在前台展示的时候就会执行此方法。

1.1.3 onResume()

这个方法在Activity变为可见时被调用,此方法被执行后,Activity就会请求AMS渲染绘制视图,此时的Activity一定处于栈顶,并且处于运行状态。

1.1.4 onPause()

这个方法在Activity失去焦点的时候被调用,从可见变为不可见的一个中间方法,此方法执行后,Activity将变为停滞状态,变得不可点击,不可触摸。

1.1.5 onStop()

这个方法在Activity完全不可见时被调用,当Activity退居后台或者被销毁的时候回执行此方法,其和onPause()的不同处在于当Activity为对话框时,onPause()会被执行,而onStop()不会执行。

1.1.6 onDestroy()

这个方法在Activity销毁之前被调用,此方法执行完之后,Activity将会被销毁,处于销毁状态。

1.1.7 onRestart()

这个方法在Activity被重新启动的时候调用,此时Activity重新变为运行状态。
从onCreate()到onDestroy()是Activity的完整生命周期方法,学习Android,这七个生命周期方法必须牢记,不同的方法有不同的应用场景,我们要灵活应用。一般情况下,我们会在onDestroy()中完成各种初始化操作,在onDestroy()方法完成释放内存的操作,Activity并不是各个时期都是可见的,只有在onResume() 和 onStop()之间的周期才是可见的,在可见周期内可以完成和用户交互,完成特定需求。

1. 1 Activity 的构成

在上面我们讲完了Activity的生命周期,接下来我们聊聊Activity的结构构成。
Android之我当年爬过的坑_第3张图片
这是一个简单的Activity页面,

"http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="ww.com.testservice.MainActivity">    

这是我们的布局文件,我们只是给一个线性布局中写了几个Button,按理说,这里应该只显示我们的Button,可事实并非如此,Activity的构成并不是简单的Activity对象加载布局文件那么简单,其实在Activity和布局文件中间还隔着两层。实际代码在运行的时候,我们的视图会被设置给window,window中含有一个DecorView,这是我们的顶层视图。我们的布局文件会被设置给DecorView的mContentParent布局中,也就是说Activity实际内置了一些布局,我们自己写的布局是嵌套在内置布局中的,我们所看到的视图实际是个DecorView,而并非我们写的布局。

更多相关文章

  1. Android中数据存储的5种方法
  2. Android 基本控件 View 类的常用xml 属性(初级详解)
  3. android 控件-TextView用法整理
  4. 【Android布局】在程序中设置android:gravity 和 android:layo..

随机推荐

  1. sencha touch 调用android主函数里的方法
  2. Xamarin Mono For Android 4.6.07004 完
  3. 运用Android ROM Manager应用安装Clockwo
  4. Android如何反编译与再编译
  5. Android Shape属性(内含一个Button完整的
  6. 关于如何检测Android的内存泄漏:
  7. Android之ListView属性描述
  8. android 使用mediaplayer播放网络音乐
  9. Android(安卓)多个APK共享数据(Shared Us
  10. listview为空时,显示字符串