【无标题】Android------Activity 探究活动

一、Activity是什么?

Activity是一个应用程序的组件,在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作

二、手动创建活动

1.创建活动

项目创建完成,手动将项目改成Project模式,手动建立一个Empty Activity活动,并命名为FirstActivity,不要勾选Generate Layout File 和 Launcher Activity。Generate Layout File会自动为你所创建的活动创建一个对应的布局文件Launcher Activity会自动将你所创建的活动设置为当前项目的主活动。

2 创建和加载布局

在layout目录创建一个布局命名first_layout,布局采用LinearLayout(线性布局)
要加载布局就要在FirstActivity中的onCreate()方法中添加 setContentView(R.layout.first_layout);代码


setContentView()方法给当前活动加载一个布局,在方法中传入一个id。项目中添加的任何资源都会在R文件中生成一个相应的资源id,只需要调用R.layout.first_layout就可以得到first_layout.xml布局的id。

3在AndroidManifest注册

所有的活动都要在这里注册才能生效,Android Studio已经帮我们注册好了

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytest">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.ActivityTest">
        <activity android:name=".FirstActivity"></activity>
        </application>

</manifest>

配置主活动,在标签Activity 中添加以下代码

 <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />

                <category android:name="android.intent.category.DEFAULT" />
             
            </intent-filter>

4 在活动中使用Toast

首先要先定义一个弹出Toast的触发点,例如一个Button,在Button监听器当中添加以下代码

  Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();

通过Toast的静态方法创建一个Toast对象,然后调用show()将Toast显示出来

5 在活动中使用Menu

首先创建一个Menu resource file
添加以下代码创建两个菜单项

<item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>

接着重新回到FirstActivity重写onCreateOptionsMenu()方法
快捷键ctrl + o

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

通过getMenuInflater()方法能够得到MenuInflater对象,再调用它的inflate()方法就可以给当前活动创建菜单了。返回true,表示允许菜单显示出来。

重写onOptionsItemSelected方法来响应菜单

 @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.add_item:
                Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }

6 销毁活动

按以下back键 或者使用finish()方法

三 Intent在活动中穿梭

1 显式intent

intent可以指明当前组件想,要执行的动作,还可以在不同组件之间传递数据。Intent可用于启动活动、启动服务以及发送广播等场景。

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);

intent创建有多个构造函数的重载,其中一个是Intent (Context packageContext, Class<?>cls),从当前活动中跳转到目标活动

2 隐式intent

通过在activity标签下配置intent- filter的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码:

  <activity	android:name=".SecondActivity">
        <intent-filter>
            <action android:name="com.example.activitytest.ACTION_START" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

只有内容同时匹配Intent中的action和category,活动才能响应

3向下一个活动传递数据

intent 中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent 中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了

传递数据

 String data = "Hello 3G实验室";
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                intent.putExtra("extra_data", data);

接受数据

 Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");
        Log.d("SecondActivity", data);

四 活动的生命周期

1 返回栈

Android是使用Task任务来管理活动的,一个任务就是一组存放在栈里的活动集合,这个栈被称为返回栈,栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个栈的活动就会重新处于栈顶的位置。

2活动的生存期

onCreate()。这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。

onStart()。这个方法在活动由不可见变为可见的时候调用。

onResume()。这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。

onPause()。这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,
但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

onStop()。这个方法在活动完全不可见的时候调用。它和onPause(
)`方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause() 方法会得到执行,而onStop()方法并不会执行。

onDestroy()。这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态

onRestart()。这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

3保存临时数据

当一个活动进入停止状态是有可能被系统回收的,此时如果返回这个活动,并不会执行onRestart()方法,而是会执行onCreate()方法,因为活动在这种情况下会被重新创建一次。
但如果该活动中存在临时数据和状态,那么此时会发生数据丢失。

在活动中添加以下代码

 @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String tempData = "Something you just typed";
        outState.putString("data_key", tempData);
    }

onCreate()方法其实也有一个Bundle类型的参数。这个参数在一般情况下都是null,但是如果在活动被系统回收之前有通过onSaveInstanceState( )方法来保存数据的话,这个参数就会带有之前所保存的全部数据,我们只需要再通过相应的取值方法将数据取出即可。

在onCreate方法中添加以下代码

 if (savedInstanceState != null) {
            String tempData = savedInstanceState.getString("data_key");
            Log.d(TAG, tempData);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值