Android开发_1:活动

这篇博客详细介绍了安卓开发中的Activity基础知识,包括创建、布局使用、注册、销毁活动,以及Intent的使用、活动生命周期、启动模式。文中还涉及到如何在活动中使用Toast和Menu,以及数据的传递和回传。此外,解释了活动状态和生命周期中的各个回调方法,最后讨论了四种启动模式的特性。

此博客为学习安卓开发的笔记型博客,若有不妥或补充之处希望各位大神给予指正

  • 活动
  • 活动的基本用法
    • 创建活动
    • 创建布局
    • 使用布局
    • 注册活动
    • 使用Toast
    • 在活动中使用Menu
    • 销毁活动
  • intent
    • 显示声明intent:
    • 隐式声明intent:
    • 向下一个活动传递数据·:
    • 返回数据给上一个活动
  • 活动的生命周期
    • 活动状态
    • 活动的生存期
  • 活动的启动模式

活动

一种包含用户界面的组件

活动的基本用法

创建活动

创建活动后,会自动生成oncreate方法,我们可以重写此方法。

创建布局

在res的layout文件夹中创建新的布局:xxx_layout.xml文件

使用布局

在活动中的oncreate方法中调用 setContentView(R.layout.xxx_layout);声明该活动使用什么布局

注册活动

在配置文件AndroidManifest.xml中我们可以注册活动,一般我们新建活动时,IDE会帮助我们注册。

<activity android:name=".FirstActivity">
       android:label="This is FirstActivity"
       <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
</activity>

其中:<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
声明该活动为默认启动项。

使用Toast

Toast类似于alert

Toast.makeText(FirstActivity.this,"You click the button: 点我",Toast.LENGTH_SHORT).show();
                        //三个参数:上下文,显示的文本,显示的时长

在活动中使用Menu

在res/menu文件夹下新建menu: xxx_menu.xml
在menu中添加item:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/menu_main_item_add"
    android:title="Add"
    />
    <item
        android:id="@+id/menu_main_item_Remove"
        android:title="Remove"
        />
</menu>

在方法中重写onCreateOptionsMenu方法:
重写方法的快捷键为:ctrl+O

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        //两个参数:第一个参数指定通过哪个资源文件创建菜单,第二个参数指定菜单项传给哪一个Menu对象,这里指定onCreateOptionMenu()方法中传入的参数
        return true;//return true 菜单将显示出来,return false菜单将无法显示
    }

销毁活动

finish()方法,或者通过点击手机自带的back键
当然点击back键会调用该活动中的onBackPressed()方法,该方法中含有finish()方法,本质还是调用了finish()

intent

使用intent启动其他的活动并可以传递数据。

显示声明intent:

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
//显式声明intend:传入两个参数:第一个参数为执行启动活动事务的上下文,第二个是想要启动的目标活动

//	启动新的活动:
startActivity(intent);

隐式声明intent:

Intent intent=new Intent("com.example.activitytest.ACTION_START");
//隐式声明intend:传入一个参数:需要被执行的action,表明我们想要启动能够相应这个action的活动

//一个intend只能指定一个action,但却能指定多个category
 intent.addCategory("com.example.activitytest.MY_CATEGORY");

//使用隐式intend,我们不仅可以启动自己程序内的活动,还可以启动其他程序内的活动:
//例如打开浏览器的一个界面
Intent intent=new Intent(Intent.ACTION_VIEW);
 intent.setData(Uri.parse("http://www.baidu.com"));

是不是完全不知道上面说的action和category是神马,来我们现在填坑:
在配置文件中找到注册的活动:

<activity android:name=".SecondActivity"></activity>

现在我们添加如下代码来声明该活动可以完成的acton和category

<intent-filter>
     <action android:name="这里为action名称,可以是官方给的也可以是自己写的"/>
     <category android:name="category名称,可以是官方给的也可以是自己写的"/>
</intent-filter>

action和category的区别:
在隐式声明intent中,action只要有一个匹配上就可以启动该活动,
但category则需要全部匹配才可以启动活动

向下一个活动传递数据·:

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
//显式声明intend:传入两个参数:第一个参数为执行启动活动事务的上下文,第二个是想要启动的目标活动

 intent.putExtra("extra_string","hello second activity");
//通过intent 传递数据,使用putExtra方法将数据放入intent中,传递两个参数,第一个为键,第二个为值

然后我们重写目标活动的onCreate方法:

final Intent intent=getIntent();
//获取启动它的intent

String data=intent.getStringExtra("extra_string");
Log.d(TAG, data);

可以看出传递成功了:

D/SecondActivity: hello second activity

返回数据给上一个活动

startActivityForResult(intent,1);  //启动一个活动,并在该活动销毁时能够返回一个结果给上一个活动
//第二个参数为请求码,用于在之后回调onActivityResult方法中判断数据来源
 //比如能够启动多个活动,用请求码来判断区分回调的是哪一个活动

在secondActivity中添加按钮并添加响应事件:
按下此按钮后会销毁secondActivity并返回数据

public void onClick(View v) {
Intent intent1=new Intent();
intent1.putExtra("second_extra_string","hello first activity");
setResult(RESULT_OK,intent1);//专门用于向上一个活动返回数据
//第一个参数用于向上一个活动返回处理结果,一般为RESULT_OK 或 RESULT_CANCELED ,第二个参数传递带有数据的intent
finish();
}

启动的活动销毁时,会回调上一个活动的onActivityResult方法:

    //第一个参数:请求码;第二个参数:处理结果;第三个参数:带有数据的intent
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                Log.d(TAG, data.getStringExtra("second_extra_string"));
        }
    }

活动的生命周期

安卓中的活动是可以层叠的,每启动一个新的活动,就会覆盖在原活动之上。销毁一个活动后,下面的活动会重新显示出来。
活动是通过栈来存储的。这个栈也被称为返回栈。
在这里插入图片描述

活动状态

每个活动在其生命周期中最多有四种状态:
运行状态
当活动处于栈顶时,该活动就处于运行状态
暂停状态
不在栈顶,但仍然可见(不是所有活动都能充满整个屏幕)
停止状态
不在栈顶,且完全不可见时
销毁状态
从栈中移除

活动的生存期

Activity类中定义了7种回调方法,覆盖了活动生命周期的每一个环节:
onCreate():
第一次被创建时调用,完成活动的初始化操作,比如加载布局,绑定事件等。
onStart():
在活动由不可见变为可见时使用
onResume():
在活动准备好和用户交互时调用,此时活动一定处于运行状态
onPuase():
在系统准备启动或恢复另一个活动时调用
onStop():
在活动不可见时调用
onDestory():
被销毁之前调用
onRestart():
在活动由停止变为运行状态之前调用。

在这里插入图片描述

活动的启动模式

启动模式一共有4种:standard、singleTop、singleTask、singleInstance。
我们可以在AndroidManifest.xml文件中通过给<activity 标签指定 android:launchMode来选择启动模式。
standard:
默认的启动模式,每次启动一个活动,都会新建一个活动实例放到栈顶。
singleTop:
当系统发现要启动的活动已经在栈顶,则不会新建活动。但若栈中存在该活动但不在栈顶时,仍会新建新活动实例。
singleTask:
保证每个活动只有一个实例,在新建活动时,若系统检测到返回栈中已有这个活动的实例,则不会新建活动。而是会将这个活动之上的所有活动全部出栈,使得该活动位于栈顶。
singleInstance:
指定为singleInstance的活动会启用一个新的返回栈来管理这个活动。可以做到多个程序共享一个活动实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值