先看效果图:

Android为我们提供了四种应组件,分别为Activity、Service、Broadcast receivers和Content providers,这些组建也就是我们开发一个Android应用程序的基石。系统可以通过不同组建提供的切入点进入到开发的应用程序中。对用户来说不是所有的组建都是实际的切入点,但是他们之间都是相互依赖的,它们每一个作为存在的实体,扮演着特定的角色,作为独一无二的基石帮助开发者定义Android应用的行为。下面我将整理自己的Activity学习点滴:

一个Acitvity作为一个显示在屏幕上的用户交互界面,比如在电子邮件应用中,一个用来显示收件列表的Activity,一个用来写邮件的Activity,一个阅读邮件内容的Activity,等等。Activity用来提供用户体验,许多不同体验的Activity聚集在一起即可以形成一个Android应用程序的用户体验,每一Activity都是相互独立的。应用除了可以访问自己的Activity,也可以访问其他APP的Acitivity(需要被APP允许)。

1.如何创建一个Activity?

必须创建一个Activity的 子类,在子类中需要实现Activity状态在生命周期中切换时系统回调的函数(onCreate、onStart、onResume、onPause、onStop、onDestroy),当然并非所有的函数都需要重新实现。其中两个比较重要的函数为onCreate和onPause:

onCreate(),此方法必须要重写。系统调用此方法创建activity,实现该方法是你初始化你所创建Activity的重要步骤。其中最重要的就是调用 setContentView() 去定义你的要展现的用户界面的布局。

onPause(),当系统任务用户离开此界面时会调用此方法,此时并非销毁一个Activity。通常在这里就要处理一些持久超越用户会话的变化,比如:数据的保存。

为了保证流畅的用户体验和处理,你可以调用其他的回调函数来使你的Atctivity停止或销毁。在onStop()方法中,一般做一些大资源货对象的释放,如:网络或者数据库连接。可以在onResume时再加载所需要资源。

2创建Activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MainActivity extends Activity { 
 
    //必须重写的方法 
 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
        super.onCreate(savedInstanceState); 
 
        setContentView(R.layout.activity_main);//activity的布局 
 
    
 

2.一个Activity创建完成后,为了它可以访问系统必须要声明注册它到应用的AndroidManifest.xml文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<activity 
 
    android:name="com.zy.demo.activity.MainActivity" 
 
    android:label="@string/app_name" 
 
    <intent-filter> 
 
        <action android:name="android.intent.action.MAIN" /> 
 
        <category android:name="android.intent.category.LAUNCHER" /> 
 
    </intent-filter> 
 
</activity> 

<activity>有很多属性供开发者定义不同特色的Activity,比如lable、icon或者theme、style等。其中android:name是必须的属性,用来定义activity的名字,当应用发布后不能改变。

<activity>还提供各种intent-filter,使用<intent-filter>来声明其它应用组件如何激活(启动)Activity,<intent-filter>有包含<action>和<category>两个元素。如上例中<action android:name="android.intent.action.MAIN" />用来表示此Activity需要响应android.intent.action.MAIN(表明为应用程序的主要入口),<category android:name="android.intent.category.LAUNCHER" />表示Activity为LAUNCHER类别,即应用程序会列在Launcher中,允许用户直接启动。以上也是一个应用的主activity所必须的声明方法:一个MAIN action,和一个LAUNCHER category。如果要Activity响应其他应用的隐式的intent,则需要为Activity声明对应action,还可以添加categor和data。

3.Activity的启动

3.1 startActivity

通过调用startActivity(intent)启动Activity,intent用来准确的描述你要启动的Activity,或者你要进行的action,intent也可以用来携带小数据给被启动Acitivity。

当在同一个应用中间需要简单启动另一个Activity,intent明确的定义你要启动Activity类即可:

1
2
3
4
5
6
7
//定义一个intent,指名要启动的activity:ToStartActivity 
 
Intent intent =  new Intent(MainActivity.this,ToStartActivity.class); 
 
//使用startActivity(),启动activity 
 
startActivity(intent); 

在你的应用程序需要执行一些自身没有Activity可以执行的行为时,我们可以使用手机上的其他应用程序的Activity来代替执行。比如发送一个mail、查看一张图片、搜索一个单词等等。这个里也就是Intent的重要指出,你可以定义一个intent描述你想要做的行为,等你发送给系统后,系统会启动合适的Acitivty帮你执行,如果有多个应用的Activity都可以处理此行为时,系统会让用户去选择一个。当此Activity执行完毕后,原来的Activity将比

1
2
3
4
5
6
7
//跨应用从google界面搜索 
 
              Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); 
 
              intent.putExtra(SearchManager.QUERY, "zy"); 
 
              startActivity(intent); 

当跨应用启动Activity时,在定义intent时必须要为他指定具体的acitvity,前提是此activity必须暴露在自己应用程序之外(android:exported="true"):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Intent intent = new Intent(); 
 
//指定要启动组建完整的包名,对象名 
 
ComponentName cn = new ComponentName("com.android.settings"
 
        "com.android.settings.RunningServices"); 
 
intent.setComponent(cn); 
 
// 使用context.startActivity()时需要新启一个任务 
 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
 
startActivity(intent); 

3.2 startActivityForResult

通过调用 startActivityForResult(intent),来接收到启动的Acitivity反馈的结果。为了接收接下来启动的Activity的结果,需要重写onActivityResult()这个回调函数。当调用的activity完成后,它将返回一个含有结果的intent给onActivityResult()处理。比如,在应用程序的Activity中,需要用户选择联系人中的一个,Activity需要得到联系人的部分信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Intent intent = new Intent(Intent.ACTION_PICK, 
 
                        Contacts.People.CONTENT_URI); 
 
                //启动一个带有选择联系人返回结果的activity 
 
                startActivityForResult(intent, PICK_CONTACT_REQUEST); 
 
          这里的PICK_CONTACT_REQUEST为自定义的int型请求反馈结果代码。
 
//重新onActivityResult()用来处理接收到的返回结果 
 
@Override 
 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
    // 如果请求requestCode成功,且请求返回的结果resultCode是我们要的PICK_CONTACT_REQUEST 
 
    if (resultCode == Activity.RESULT_OK 
 
            && requestCode == PICK_CONTACT_REQUEST) {            
 
        // 处理Intent返回的数据,在联系人数据库中查找联系人的名字 
 
        Cursor cursor = getContentResolver().query(data.getData(), 
 
                new String[] { Contacts.People.NAME }, nullnullnull); 
 
           
 
        if (cursor.moveToFirst()) { // 如果cursor不为空,就查找出联系人的名字 
 
            int columnIndex = cursor.getColumnIndex(Contacts.People.NAME); 
 
            String name = cursor.getString(columnIndex); 
 
            //添加其他功能 
 
        
 
    
 
}    

这里在要说明是onActivityResult()使用来处理返回结果的,首先要检查的是请求是否成功,然后是否有返回结果,结果是否是startActivityForResult()中所要的,如果满足,则处理通过Intent返回的数据。

4.关闭Activity

1  Activity可以调用finish()方法关闭自己,也可以通过调用finishActivity()的方法关闭一个独立的之前启动的Activity。

2 调用finishActivity()的方法关闭一个独立的之前启动的Activity

//此方法用在关闭使用startActivityForResult(requestCode)启用的Activity

this.finishActivity(requestCode);

关于何时关闭一个Activity,一般由系统直接为我们管理。但是当你确认用户不用返回到此Activity时,我们调用以上方法关闭对应的Activity。

5 Demo代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package mm.shandong.com.testusea;
 
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
 
public class TestUseAActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_use_a);
    }
   //启动第一个activity
    public void startFirstActivity(View view) {
        Intent intent = new Intent(this, TestUseAActivity2.class);
        startActivity(intent);
    }
    //启动第二个activity
    public void startSecondActivity(View view) {
        Intent intent = new Intent(this, TestUseAActivity3.class);
        startActivity(intent);
    }
    //启动第三个activity,这个activity 4秒钟后被关闭
    public void startThirdActivity(View view) {
        Intent intent = new Intent(this, TestUseAActivity4.class);
        startActivityForResult(intent, 1);
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(4000);
                    finishActivity(1);
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
 
    }
}

Activity详解一 配置、启动和关闭activity转载 https://www.cnblogs.com/androidWuYou/p/5887726.html的更多相关文章

  1. .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html

    .Net使用Redis详解之ServiceStack.Redis(七)   序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现 ...

  2. Activity详解一 配置、启动和关闭activity

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  3. Android四大组件之Activity详解——创建和启动Activity

    前面我们已经对Activity有过简单的介绍: Android开发——初始Activity Android开发——响应用户事件 Android开发——Activity生命周期 先来看一下最终结果 项目 ...

  4. Activity详解三 启动activity并返回结果 转载 https://www.cnblogs.com/androidWuYou/p/5886991.html

    首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...

  5. tomcat启动nio,apr详解以及配置

    tomcat启动nio,apr详解以及配置 前言 在正文开始之前,我们先在idea工具中看看启动的信息,顺便看下启动的基本信息 在这里插入图片描述可以看到信息有tomcat版本操作系统版本java版本 ...

  6. Xamarin android 之Activity详解

    序言: 上篇大概的讲解了新建一个android的流程.今天为大家带来的是Activity详解,因为自己在开发过程中就遇到 好几次坑,尴尬. 生命周期 和Java里头一样一样的,如图 图片来源于网上哈, ...

  7. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  8. log4j.properties 详解与配置步骤(转)

    找的文章,供参考使用 转自 log4j.properties 详解与配置步骤 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR ...

  9. C3P0连接池详解及配置

    C3P0连接池详解及配置 本人使用的C3P0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.m ...

随机推荐

  1. Python语法学习记录之tuple该如何使用?

    一.介绍 dict 的用法比较简单,它可以存储任意值,并允许是不同类型的值,下面实例来说明: 下面例子中 a 是整数, b 是字符串, c 是数组,这个例子充分说明哈希数组的适用性. 每一个元素是pa ...

  2. leetcood学习笔记-501- 二叉搜索树中的众数

    题目描述: 方法一: class Solution: def findMode(self, root: TreeNode) -> List[int]: if not root: return [ ...

  3. [转]Delphi DLL的创建、静态 以及动态调用

    第一章  DLL简单介绍 由于在目前的学习工作中,需要用到DLL文件,就学习了下,在这里作个总结. 首先装简单介绍下DLL: 1,减小可执行文件的大小 DLL技术的产生有很大一部分原因是为了减小可执行 ...

  4. Linux命令(2):cat

    cat命令是一个文本连接和查看的命令,用于文件的输出显示. 三大功能 一次显示整个文件. $ cat filename 从键盘创建一个文件.只能创建新文件,不能编辑已有文件. $ cat > f ...

  5. [NOI.AC] candy

    题意:求净利益. 思路: 其实我也不怎么懂题面. 不过这种题一般来说就是从最大的开始选. 所以考虑贪心. 那么代价如何处理呢?? 我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次 ...

  6. Python-爬虫-HTTP协议请求之GET请求

    我们在百度搜索时,输入关键词,比如“hello”,URL发生变化,如下: https://www.baidu.com/s?wd=hello&rsv_spt=1&rsv_iqid=0xf ...

  7. CApiHook__Api钩子类

    见过网上有很多ApiHook的类,但是都不尽入人意,要么就是写的不够好不够完善,要么就是跑不起来. 用别人写的代码总是有种不安心,所以自己就花了一晚上写了CApiHook类.已经尽量确保自己写的类是非 ...

  8. this 关键字的使用及说明

    this 是Java 中常见的一个关键字,它的主要作用是引用类的当前实例,本篇文章主要介绍 this 关键字的几种使用情况. 1. this 调用当前类的变量,也就是类中的成员变量. 代码示例: pu ...

  9. python中oop

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

  10. 16-Ubuntu-文件和目录命令-切换目录-cd

    cd(change directory),其功能为更改当前的工作目录. 注意:Linux所有的目录和文件名都是大小写敏感的. 命令 含义 cd     切换到当前用户的主目录(/home/用户目录) ...