Android四大核心组件之Activity

时间:2025-02-02 18:04:02

一、活动生命周期

  Android四大核心组件之Activity

二、生命周期执行介绍

当该页面(Activity)被启动时

会执行onCreate()、onStart()、onRestart()这三个方法,

只有当onRestart() 方法执行完后才会处于一个运行状态(Activity running)


如果另外一个activity 跑到当前正在执行的activity前面了,我们当前的activity就会执行onPause()方法,比如来电话了长按Home键的情况。

如果从onPause()方法返回到activity页面的时候,会执行一次onResume(),再回到activity。


如果页面从活动状态,变为不可见状态时,也就是停止状态时候,

会执行onPause()方法后再执行onStop()方法。 

如果从onStop()方法处返回到页面时,

会执行一个onRestart()方法后执行onStart()方法接着再执行onResume()方法后回到页面。

注意:如果处于onStop()或者onPause()方法时候,页面由于手机内存低、或者被其他软件杀掉的时候,

再返回页面时候,会从onCreate()方法开始执行,接着onRestart()、onStart()、onResume()


onDestroy()方法,被系统关闭的时候或者手动的时候才会执行,执行完这个方法后,我们的activity就被彻底关闭了。

三、Activity方法定义

活动的整个生命周期由以下Activity方法定义。

 public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();
}

  

四、Activity样式修改

通过添加activity中theme参数可以修改界面的样式,

Android四大核心组件之Activity

如下两个图,可以看出添加theme样式后菜单栏改没了,当然样式可以选择其他的,会有不同效果。

Android四大核心组件之ActivityAndroid四大核心组件之Activity

五、Activity的创建与切换

  1.首先新建一个activity页面,

  用的Android studio,建的比较快,

  如果用eclipse的话需要先创建一个类,并且扩展至Activity,

  然后在AndroidManifest.XML中配置添加页面,

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

  还要在layout中新建一个内容布局,并且在创建的类中的onCreate方法中绑定它。

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}

  这里我直接通过Android studio创建,省略以上步骤。

Android四大核心组件之Activity

    2.在activity1视图中创建一个标签和一个按钮

  注意ID的写法,自定义ID得加上@+/

  Android四大核心组件之ActivityAndroid四大核心组件之Activity

  

  接着回到视图A类,

  编写以下代码

Android四大核心组件之Activity

执行效果如下,点击后跳转到第二个页面

Android四大核心组件之ActivityAndroid四大核心组件之Activity

六、如何关闭掉一个activity

  设计如下,在第二个页面中拖入一个按钮,把当前activity关闭掉

  

private Button btnButton;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2); btnButton =findViewById(R.id.btnClose);
btnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
}); }

  点击关闭后回到页面一

Android四大核心组件之ActivityAndroid四大核心组件之Activity

七、activity数据的传送

设计思路:在页面二中创建一个标签,用来接收来自页面一的数据,

然后通过按钮“启动第二个页面”把数据带到页面二。

1.通过putExtra方法和getStringExtra方法实现简单的数据传送。

Android四大核心组件之Activity

Android四大核心组件之Activity

Android四大核心组件之Activity

2.通过Bundle传送复杂类型数据

Android四大核心组件之Activity

Android四大核心组件之Activity

执行效果也是一样 的。

八、activity关闭后数据的回调

  当页面二activity关闭的时候,从页面二把数据传回,然后从页面一获得数据并显示到页面一。

   在页面一想得到一面二传回来的数据,这里就不能用startActivity方法,

  要改用startActivityForResult函数。

  Android四大核心组件之Activity

  并且重载onActivityResult方法,下图中通过data.getStringExtra得到视图二返回的参数

Android四大核心组件之Activity

下图为视图二,这里在finish之前使用setResult将参数传回

Android四大核心组件之Activity

测试如下,先进入视图一,下图中TextView 是默认值,当前没有收到返回值

Android四大核心组件之Activity

接着点击启动第二个页面

Android四大核心组件之Activity

然后点击关闭,这里可以看到已经得到了从页面二返回的数据

Android四大核心组件之Activity

九、用到的部分源码

package com.ali.application.mytest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity { private Button S2;//定义一个按钮
private TextView tRe;//定义一个标签 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); S2=findViewById(R.id.S2);//通过findViewById查找视图中按钮 tRe=findViewById(R.id.tRe); S2.setOnClickListener(new View.OnClickListener() {//设置一个事件监听器
@Override
public void onClick(View view) {
//启动页面2
Intent i = new Intent(MainActivity.this,Main2Activity.class);
//i.putExtra("val","mytest");
Bundle data=new Bundle();
data.putString("val","myTest");
i.putExtras(data);
// startActivity(i);//要取得返回值的话不能用这个函数
startActivityForResult(i,0);//这里的0对应onActivityResult方法中的requestCode }
});
System.out.println("Create");
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { String re=data.getStringExtra("val"); tRe.setText(re); super.onActivityResult(requestCode, resultCode, data);
} @Override
protected void onStart() {
super.onStart();
System.out.println("start");
} @Override
protected void onResume() {
super.onResume();
System.out.println("resume");
} @Override
protected void onPause() {
super.onPause();
System.out.println("pause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("stop");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("destroy");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("restart");
}
}

  

package com.ali.application.mytest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class Main2Activity extends AppCompatActivity { private Button btnButton;
private TextView tOut;//定义一个标签 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2); btnButton =findViewById(R.id.btnClose);
btnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { Intent i = new Intent();
i.putExtra("val","testResult");
setResult(0,i);
finish();
}
}); tOut = findViewById(R.id.tOut); //tOut.setText(getIntent().getStringExtra("val")); Bundle data=getIntent().getExtras();
tOut.setText(data.getString("val")); }
}