参考:《Professional Android 4 Application Development》

深入了解Android Activity

每一个Android Activity都对应于一个用户界面(UI)。每个Android Application都有一个main Activity,而这个main Activity大多由多个Fragment组成,而这些Fragment后面往往都由一个或多个secondary Activity支持。当用户在不同的界面(窗口)切换时,Android会生成对应的新Activity。

创建Activity

Android提供了Activity类,在编写自己的Activity时,程序员需要继承Activity并重载里面的方法。例如:

package cn.jubincn.activities;

import android.app.Activity;
import android.os.Bundle; public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}

空白的Activity对应的是一个空白屏幕,因此我们需要添加Fragment,Layout和View等UI元素来定制自己的Activity。大部分Activity会占据整个屏幕,除此之外,还有一些半透明的Activity和浮动的Activity。

Android应用程序中,用户交互界面和数据的显示是由View来提供的。Android中的layout类,也叫ViewGroup,可以将View打包进行管理。Fragment则用来组织界面元素,从而更方便地适配不同的界面。给Activity设置界面的方法有两种,一种是创建View类,将其设置到Activity中;另一种是将layout文件设置到Activity中,然后Inflate对应的Activity。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
setContentView(textView);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
<activity android:label="@string/app_name" android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Activity生命周期

Activity的生命周期可以决定Process的优先级,并且Activity需要对生命周期事件进行适当地响应才能提供更好的用户体验。

Activity Stacks

Activity的状态决定于它在Activity Stack中的位置。Activity Stack遵循Stack的“先进后出”的规则:当一个Activity刚被创建时,它会移到栈顶;若用户点击”go back”按钮,或关闭当

前Activity时,栈顶的Activity会被弹出,第二个Activity成为新的栈顶Activity。

Activity State

Activity的生命周期中,有这几种状态:

  • Active:在栈顶的Activity,具有最高的优先级,Android会竭力满足它对资源的需求。当其他Activity变为Active状态时,此Activity的状态会变为Paused。
  • Paused:处于这个状态的Activity的部分或全部对用户可见,但无法接受用户的输入。
  • Stopped:当Activity对用户不可见时,它将转为Stopped状态。此时尽管Activity仍会保留在内存中,但当系统资源紧张时,它会被回收掉。
  • Inactive:Activity在启动之前,或被kill之后,处于Inactive状态。

监听并响应Activity State的变化

Activity需要在State发生变化时作出相应的反应,为此Android为Activity的生命周期事件提供了很多相关的ActionHandler,下图展示了Activity的几个生命周期:

对应的代码:

package cn.jubincn.activities;
import android.app.Activity;
import android.os.Bundle;
public class MyStateChangeActivity extends Activity {
  // Called at the start of the full lifetime.
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  // Initialize Activity and inflate the UI.
  }
  // Called after onCreate has finished, use to restore UI state
  @Override
  public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate. Will only be called if the Activity has been killed by the system since it was last visible.
  }
  // Called before subsequent visible lifetimes for an Activity process.
  @Override
  public void onRestart(){
    super.onRestart();
    // Load changes knowing that the Activity has already been visible within this process.
  }
  // Called at the start of the visible lifetime.
  @Override
  public void onStart(){
    super.onStart();
  // Apply any required UI change now that the Activity is visible.
  }
  // Called at the start of the active lifetime.
  @Override
  public void onResume(){
    super.onResume();
    // Resume any paused UI updates, threads, or processes required
    // by the Activity but suspended when it was inactive.
  }
  // Called to save UI state changes at the end of the active lifecycle.
  @Override
  public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate and onRestoreInstanceState if the process is killed and restarted by the run time.
    super.onSaveInstanceState(savedInstanceState);
  }
  // Called at the end of the active lifetime.
  @Override
  public void onPause(){
    // Suspend UI updates, threads, or CPU intensive processes that don’t need to be updated when the Activity isn't the active foreground Activity.
    super.onPause();
  }
  // Called at the end of the visible lifetime.
  @Override
  public void onStop(){
    // Suspend remaining UI updates, threads, or processing that aren’t required when the Activity isn’t visible.
    // Persist all edits or state changes as after this call the process is likely to be killed.
    super.onStop();
  }
  // Sometimes called at the end of the full lifetime.
  @Override
  public void onDestroy(){
    // Clean up any resources including ending threads, closing database connections etc.
    super.onDestroy();
  }
}

Android 4学习(6):概述 - 深入了解Android Activity的更多相关文章

  1. Android开发学习之路--MAC下Android Studio开发环境搭建

    自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...

  2. Android UI学习组件概述

    Android的UI组件繁多,如果学习的时候不能自己总结和分类而是学一个记一个不去思考和学习他们内在的联系那真的是只有做Farmer的命了.为了向注定成为Farmer的命运抗争,在学习Android的 ...

  3. android studio学习----Failed to resolve: com.android.support:design:22.1.1

    这个目前好像没有合适的办法,唯一可行的就是 点击那个提示  进行SDK Manager下载就可以了 但是天朝的网啊,我试了很多次,突然的可以下载,运气啊 类似这一系列问题解决办法就是  重新更新SDK ...

  4. Android 开发学习进程0.12 自定义view activity的属性

    设置类似钉钉或tel的圆形用户名首字母头像 设置有两种方法,一是使用已有的库或自定义的view组件,但如果确定只是文字头像,也可使用textview的backgrou属性,调整资源文件使textvie ...

  5. Android动画学习(二)——Tween Animation

    前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...

  6. Android 4学习(4):概述 - Using Resources

    参考:<Professional Android 4 Application Development> Andorid中的资源包括用户自定义资源和系统自带资源,这两种资源既可以在代码中使用 ...

  7. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  8. Android:日常学习笔记(7)———探究UI开发(4)

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  9. (转载)Android:学习AIDL,这一篇文章就够了(上)

    前言 在决定用这个标题之前甚是忐忑,主要是担心自己对AIDL的理解不够深入,到时候大家看了之后说——你这是什么玩意儿,就这么点东西就敢说够了?简直是坐井观天不知所谓——那样就很尴尬了.不过又转念一想, ...

随机推荐

  1. OpenStack with Opendaylight Part 1: Intro to Pipeline

    Using Vagrant to create vm nodes; devstack to start openstack using Opendaylight as ML2. Openstack w ...

  2. mac系统卸载mono

    官方页面:http://www.mono-project.com/docs/about-mono/supported-platforms/osx/#uninstalling-mono-on-mac-o ...

  3. oracle管理优化必备语句以及oracle SQL语句性能调整

    本文转自http://www.dataguru.cn/article-3302-1.html oracle数据库管理优化必备语句: 1. SELECT T.START_TIME,T.USED_UBLK ...

  4. jstat 简介(2)

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意:使用的jdk版本是jdk8. 类加载统 ...

  5. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    题目链接 dp进阶之CDQ分治优化dp. 前置技能:dp基本功底,CDQ分治,树状数组. 问题等价于求二维最长上升子序列,是一个三维偏序问题(时间也算一维). 设$dp[i]=(l,x)$为以第i枚导 ...

  6. kafka集群下线broker节点实践方法(broker topic 迁移)

    [root@es03 ~]# cd /usr/hdp//kafka/bin [root@es03 kafka]# cd bi -bash: cd: bi: No such file or direct ...

  7. Linux 修改PostgreSQL外部访问白名单

    1. 查找配置文件 # find / -name pg_hba.conf # find / -name postgresql.conf 2.修改 2.1 修改pg_hba.conf 查找IPv4 lo ...

  8. Django 登录页面重定向

    转自:http://blog.chedushi.com/archives/3484 登陆和注销操作在网页编程上很常见,这两个操作经常需要在操作成功以后转入发出请求的页面. 比如用户正在浏览一篇文章,发 ...

  9. BZOJ5319: [Jsoi2018]军训列队

    BZOJ5319: [Jsoi2018]军训列队 https://lydsy.com/JudgeOnline/problem.php?id=5319 分析: 易知把所有人按原本的顺序放到\([K,K+ ...

  10. npm init node 通过指令创建一个package.json文件及npm安装package.json

    描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...