原文链接:https://developer.android.google.cn/guide/components/activities/intro-activitiesSS

一, 对activit的介绍

activity类是很重要的组件在安卓app中,并且activit被启动的方式和组合方式是平台应用模型的基本部分。

不同于其他编程模式,启动需要一个main方法,安卓系统在activity实例中启动代码通过调用生命周期中的特定方法。

这个文档介绍了activity的概念,并且提供了一些指导,关于如何去用他们。

关于一些额外的信息如何过呢更好的构建你的app,可以看Guide to app architecture

二,activity的概念

移动app体验不同于桌面程序,移动app和用户交互的接口不止一个。不一定在什么地方,什么时间启动。

例如,如果你从主屏幕打开一个email app,你也许会看到一个email是列表。通过对比,

如果你使用一个社交媒体app打开你的emailapp ,你可能直接看到email app的屏幕去写一封电子邮件。

activity类被设计为更适合这种模式。当一个app调用另一个app时,app调用的是另一个app的activity, 而不是调用另一个app作为一个整体。在这种方式下,activity作为app的交互点和其他用户(在linux底层机制系,一个进程被看做一个用户,一个app运行在一个进程中)交互。实现一个activity都是activity的子类。

一个activity提供了绘画app UI的窗口。这个窗口一般占满了整个屏幕,但是也可能比屏幕小和浮动在其它窗口的顶部(也就是第一层,最高层 ,覆盖其它页面窗口)。

一般来说,一个activity实现一个窗口在app中。例如,一个app的activity可能实现了一个preferences窗口,而另一个activity实现了一个 select photo窗口。大多数app包含很多窗口,也就意味着有多个activity。典型的,在一个app中的一个activity被指定为main activity,这个activity就是当用户启动app时显示的第一个窗口。

每一个activity可能当需要的时候在启动。例如,在一个email app中的main activity可能提供一个展示一个email盒子的窗口。在那里,main activity再启动另一个activity用来提供另一些像写email和打开个人emails的功能。

尽管activitys共同工作形成在app中有凝聚力的体验,每个activity只是松散的联系在一起。在app的activity之间一般符合最小依赖原则。事实上,activity经常启动另一些app的activity。

例如,一个浏览器app可能启动一个社交媒体app的分享activity。

为了在你的app中使用activity,你必须在app的manifest中注册他们的信息,还必须合适的管理他们的生命周期。下面将会介绍。

三,配置manifest

在manifest中声明activities,并且包含他们的属性。

声明activity:

为了声明你的activity,打开你的manifest文件,添加一个<activity>元素作为<application>的子元素。如下所示

 <manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

只需要为这个子元素添加android:name,它指定activity的类名,你也可以添加额外的属性,定义activity特性,例如label,icon,或者UI主题。更多的属性,可以看<activity>元素的参考文档。

Note:在发布了你的app之后。你不应该改变activity的名字。如果您这么做,可能破坏一些功能­­­性,例如app屏幕剪辑。为了看更多关于在发布后避免更改,可以看That Cannnot Change

四,声明intent filters

Intent filters是安卓平台十分强大的功能。他们提供了不仅可以使用显示请求启动activity的能力,也可以使用隐式请求。例如,一个显示请求可能告诉系统能够打开Gmail  app的Send Email activity 。通过对比,一个隐式请求告诉系统,打开所有能做这个工作的Send Email activity。 当系统UI要求一个用户的app去执行一个任务,这其中intent filter在工作。

你可以在<avtivity>元素中声明一个<intent-filter>来充分利用这个特点。这个元素的定义包括一个<action>元素,作为可选的,还有<category>和<data>元素。这些元素一起定义了intent的类型,回应你的请求。例如,下面的代码展示了对activity的配置,发送text数据,并且接受来自其它activity的请求

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

在这个例子中,<action>元素指定activity发送数据。声明<category>元素为DEFAULT使activity接受启动请求。<data>元素指定了activity可能发送的数据类型。下面的代码片段展示了如何去调用activity

JAVA代码

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT,
textMessage);
// Start the
activity
startActivity(sendIntent);

KOTLIN

val
sendIntent = Intent().apply
{
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT,
textMessage)
}
startActivity(sendIntent)

如果你打算你的app是自包含的,不想要别的app去激活里面的activity,就不需要设置任何intent filters。你可以启动他们用显示调用在你的app里面。关于更多的信息,请看https://developer.android.google.cn/guide/components/intents-filters.html

五,声明权限

你可以使用manifest中的<activity>标签去控制哪些app可以启动特定的activity。一个父activity不能启动子activity,除非两个activitiy有同样的权限。如果你声明了一个<uses-permission>元素为一个特别的activity,,那么请求调用的activity也必须有相应的<uses-permission>元素。

例如。如果你的app去使用一个假设的SocialApp去分享一个post在社交媒体上,

SocialApp他自身必须定义权限,一个app调用它必须有的。

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

去调用SocialApp,你的app必须匹配在SocialApp manifestzhong 设置的权限

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

关于更多https://developer.android.google.cn/guide/topics/security/security.html

六,管理activity声明周期

在activity的生命周期中,经历了好几个状态。使用一系列的回调方法去处理各个状态间的过渡。下面介绍回调方法。

onCreate()

你必须实现这个回调,当系统创造你的activity时启动。你的实现应该初始化那些在你的activity当中十分重要的组件:例如,你的app创建views和绑定数据到lists。最重要的是,你在哪里必须调用setContentView(layout),定义layout为你的activity的用户接口。

当onCreate()结束的时候,下一个回调方法总是onStart()

OnStart()

当onCreate()结束,activity会进入started状态,并且activity变得可见对用户。这个方法包含activity的最后准备工作,使其成为前台和交互式的。

OnResume()

系统调用这个回调方法在和用户交互之前。在这个状态,activity在栈的最顶端,并且捕捉所有的用户输入。大多数app的核心功能都是在这个方法中实现的。OnResume下面总是onPause

OnPause()

系统回调这个方法,当activity丧失焦点时,同时进入暂停状态。这个状态会放生在的情况,例如,用户点击了back或者Recents按钮。当系统回调onPause()方法时,它意味着你的activity仍然是可见的,但是不能够进行交互。在不久之后将进入stopped或者resumed状态。

一个在暂停状态的activity可能继续更新这个UI,如果这个用户是在更新。例如,一个activity包含一个导航地图或者音乐播放器,即使丧失焦点,用户也希望UI继续更新进度。

你不应该利用onPause()去存储应用或者用户数据,做网络请求,或者执行数据库交互。更多的信息关于存储数据,看https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html#saras

onStop()

当activity不再对用户可见,系统回调这个方法。这可能发生由于activity被destoryed,另一个activity正在starting,或者一个现存的activity正在进入resume状态和并且正在覆盖一个被停止的activity。在所有的情况下,activity都不可见对用户。

下一个回调是进入onRestart(),和用户交互。或者进入onDestory(),activity完全的终止。

OnRestart()

OnRestart()系统调用这个回调方法,当activity从stopped状态到restart状态。OnRestart()恢复stopped状态的数据。

OnDestory()

当activity被destoryed之前调用。这是最后一个状态。在这个方法里面一般实现把activity里面的资源释放,当activity被destoryed时。

更详细的内容,过段时间再更。如果翻译的不好,多谢指正,看文档学习时最好的方式之一,我觉得

介绍activity文档翻译的更多相关文章

  1. 什么是Activity,详细介绍Activity

    首先,Activity是Android系统中的四大组件之一,可以用于显示View.Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Acti ...

  2. Alljoyn瘦客户端库介绍(官方文档翻译 下)

    由于其他事情耽误,这个翻译现在才完成.接上篇—— 4 瘦客户端核心库架构 由于AllJoyn瘦客户端核心库(AJTCL)必须运行在那些功耗受限.计算能力有限.资源紧缺的设备上,因此它无法像运行在通用型 ...

  3. Alljoyn瘦客户端库介绍(官方文档翻译)

    Alljoyn瘦客户端库介绍(上) 1.简介 本文档对AllJoynTM瘦客户端的核心库文件(AJTCL)进行了详尽的介绍.本文档介绍了系统整体架构,AllJoyn框架结构,并着重于介绍如何将嵌入式设 ...

  4. UML建模之活动图介绍(Activity Diagram)

    一.活动图的组成元素 Activity Diagram Element 1.活动状态图(Activity) 2.动作状态(Actions) 3.动作状态约束(Action Constraints) 4 ...

  5. Kafka介绍 (官方文档翻译)

    摘要:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动 ...

  6. Scapy介绍官方文档翻译

    关于Scapy Scapy为何如此特别 高速的报文设计 一次探測多次解释 Scapy解码而不解释 高速展示Quick demo 合理的默认值 学习Python 本人英文水平有限,翻译不当之处,请參考官 ...

  7. Android应用程序的Activity启动过程简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6685853 在Android系统中,Activ ...

  8. Android Activity作为dialog对话框的使用详细介绍

    Activity做为Android应用层四大组件的重要组成部分,它的灵活性.可扩性无论是在应用还是游戏方面都得到了广泛应用,本文主要介绍Activity作为dialog对话框 的使用方法进行说明. 本 ...

  9. Android开发之Activity的生命周期以及加载模式

    本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...

随机推荐

  1. 解题:CF1055F Tree and XOR

    题面 树上路径是可以通过到根的路径和LCA差出来的,所以建立一棵Trie树按位贪心即可......吗? 发现空间并不够,需要我们每层现建,要记录每个数和它异或答案之后在这一层插进去的编号 #inclu ...

  2. 洛谷P1445 樱花

    题意:求 1/x + 1/y = 1/(n!)的正整数解个数. 解:神仙...... 设(n!) = t 打表发现 x ∈ [t+1 , 2t] 反正就是拿到式子以后乱搞一通然后发现得到了这个很美观的 ...

  3. 界面编程之QT的信号与槽20180725

    /*******************************************************************************************/ 一.指定父对 ...

  4. tp3 链接生成二维码

    https://packagist.org/packages/endroid/qr-code

  5. Mac系统 MAMP 集成环境下搭建 Redis

    之前由于嫌弃 mac 下命令行搭建 php+mysql 环境太复杂,给自己挖了一个大坑 就是偷懒使用了名为 MAMP 的一键集成安装包 好用是好用,但是等你需要添加点模块和功能的时候就傻眼了 这几天在 ...

  6. ceilometer主要组件分析

    一.Agent 主要有compute agent 和central agent,还有一些其他的agent这里暂时不分析. agent初始化时会动态加载给定namespace的pollster插件,并通 ...

  7. centos7配置上网

    过程请看图: just so so!

  8. HTML5 移动开发(CSS3设计移动页面样式)

    1.如何创建CSS样式表 2.CSS3的卓越特性 3.基于设备属性改变样式的媒体查询 4.如何使用属性改变元标签创建更美观移动页面   层叠样式表是移动WEB开发中的一个重要组成部分,本次分享将学到如 ...

  9. HDU 4472 Count DP题

    解题报告:题目大意,给你n个球,要将这n个球从下到上按层次排列,要求同一个层次的的每一个分支的数量都必须相等,问有多少种排列的方法. 此题的一个DP题,假设现在有n个球,要将这n个球排列好,我们就必须 ...

  10. 图的最短路径-----------SPFA算法详解(TjuOj2831_Wormholes)

    这次整理了一下SPFA算法,首先相比Dijkstra算法,SPFA可以处理带有负权变的图.(个人认为原因是SPFA在进行松弛操作时可以对某一条边重复进行松弛,如果存在负权边,在多次松弛某边时可以更新该 ...