zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android组件系列----当前Activity跳转到另一个Activity的详细过程

Android组件 一个 系列 详细 过程 ---- 当前
2023-09-14 08:57:57 时间

(1)定义一个类,继承Activity

(2)在该类当中,复写Activity当中的onCreate()方法

(3)在AndroidManifest.xml文件中注册该Activity

详细解释如下:

(1)定义一个类,继承Activity:在src文件夹里面的包中新建一个class文件,可命名为:SecondActivity.java

(2)在该类当中,复写Activity当中的onCreate()方法:在菜单栏选择Source--- Override/Implement Methods,弹出框,选择其中的onCreate()方法:

clip_image004

注:onCreate()方法是Activity运行的入口。

紧接着,在layout文件夹中,为该Activity添加布局文件:(文件名必须为小写)

clip_image006

在该布局文件中添加一个 TextView /

在SecondActivity.java中设置该Activity所使用的布局文件,即在onCreate()方法中添加如下代码:

setContentView(R.layout.second) ;
(3)在AndroidManifest.xml文件中注册该Activity:(想要启动的Activity一定要先在Manifest文件中进行注册)

打开AndroidManifest.xml文件,注意里面的Activity标签,即以下代码:

复制代码
1 activity

2 android:name="com.example.test0201_activity01.MainActivity"

3 android:label="@string/app_name" 

4 intent-filter 

5 action android:name="android.intent.action.MAIN" / 

6 category android:name="android.intent.category.LAUNCHER" / 

7 /intent-filter 

8 /activity  
复制代码

代码解释如下:

02行:代表Activity的名字:包名+类名。

03行:label指定活动中标题栏的内容。

04至08行:Activity的子标签,即:

1 intent-filter 

2 action android:name="android.intent.action.MAIN" / 

3 category android:name="android.intent.category.LAUNCHER" / 

4 /intent-filter 

以上这段代码放在哪个Activity里,那个Activity就作为应用程序默认启动的Activity。即程序运行后的默认启动的Activity。

现在将SecondActivity注册进去,在第一个Activity后面,添加如下代码:

1 activity 

2 android:name="com.example.test0201_activity01.SecondActivity"

3 android:label="SecondActivity" 

4 /activity  
 

二、Android当中的back stack(后退栈):(栈:子弹上膛,先进后出)

 

android操作系统只显示back stack中最上面的元素(只显示栈顶端的activity)。

在上方的图中,当用户点击后退按钮时,出现以下情况:(最上方的activity将被移除,依此类推)

 

三、启动一个Activity的方法:即在默认启动的Activity中启动另一个Activity

核心代码如下: 

Intent intent = new Intent();

intent.setClass(MainActivity.this, SecondActivity.class); 

步骤如下:

(1)生成一个意图对象 Intent

(2)调用setClass方法设置所要启动的Activity

(3)调用startActivity方法启动Activity

具体解释如下:

【实例】在第一个Activity点击按钮,来启动第二个Activity;在第二个Activity点击按钮,返回到第一个Activity

(1)生成一个意图对象 Intent (Intent封装了你想做什么这件事)

在布局文件activity_main.xml文件中添加一个button,并在MainActivity.java中生成button的监听器,

生成意图对象的代码如下:

Intent intent = new Intent() ;

(2)调用setClass方法设置所要启动的Activity:

Intent中的setClass方法格式如下:

intent.setClass(packageContext, cls) ;

参数解释如下:

第一个参数:这个context对象即当前activity对象。Activity是context类的子类,此时Activity向上转型了。

第二个参数:表示意图启动的那个Activity 。

(3)调用startActivity方法启动Activity

总而言之,监听器部分的【核心代码】如下:

复制代码
 class ButtonListener implements OnClickListener {

 public void onClick(View v) {

 Intent intent = new Intent();

 //setClass函数的第一个参数是一个Context对象

 //Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象

 //setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象

 intent.setClass(MainActivity.this, SecondActivity.class);

 startActivity(intent);

 }
复制代码

核心代码为第04行至第09行。

【完整代码】如下:方案一

复制代码
 1 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

 2 xmlns:tools="http://schemas.android.com/tools"

 3 android:layout_width="match_parent"

 4 android:layout_height="match_parent"

 5 android:paddingBottom="@dimen/activity_vertical_margin"

 6 android:paddingLeft="@dimen/activity_horizontal_margin"

 7 android:paddingRight="@dimen/activity_horizontal_margin"

 8 android:paddingTop="@dimen/activity_vertical_margin"

 9 tools:context=".MainActivity" 

11 Button

12 android:id="@+id/button1"

13 android:layout_width="match_parent"

14 android:layout_height="wrap_content"

15 android:text="启动第二个Activity" / 

17 /RelativeLayout 
复制代码
复制代码
 1 package com.example.activiychange;

 3 import android.app.Activity;

 4 import android.content.Intent;

 5 import android.os.Bundle;

 6 import android.view.Menu;

 7 import android.view.View;

 8 import android.view.View.OnClickListener;

 9 import android.widget.Button;

11 public class MainActivity extends Activity {

13 private Button button ;

15 @Override

16 protected void onCreate(Bundle savedInstanceState) {

17 super.onCreate(savedInstanceState);

18 setContentView(R.layout.activity_main);

20 button = (Button)findViewById(R.id.button1) ;

22 // button.setOnClickListener(new ButtonListener()) ; 

24 //为Button绑定监听器,采用匿名内部类

25 button.setOnClickListener(new OnClickListener() {

27 @Override

28 public void onClick(View arg0) {

29 //下面这一行,有两种方法。方法一:

30 Intent intent = new Intent(MainActivity.this,SecondActivity.class) ; 

31 /* //方法二:

32 Intent intent = new Intent();

33 intent.setClass(MainActivity.this, SecondActivity.class);*/

34 //备注:setClass函数的第一个参数是一个Context对象

35 //备注:Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象

36 //备注:setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象

38 startActivity(intent) ; 

40 } );

44 /* class ButtonListener implements OnClickListener {

46 @Override

47 public void onClick(View arg0) {

48 Intent intent = new Intent();

49 intent.setClass(MainActivity.this, SecondActivity.class);

50 startActivity(intent) ;

53 }*/

56 @Override

57 public boolean onCreateOptionsMenu(Menu menu) {

58 // Inflate the menu; this adds items to the action bar if it is present.

59 getMenuInflater().inflate(R.menu.main, menu);

60 return true;

63 }
复制代码
复制代码
 1 ?xml version="1.0" encoding="utf-8"? 

 2 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3 android:layout_width="match_parent"

 4 android:layout_height="match_parent" 

 6 Button

 7 android:id="@+id/button1"

 8 android:layout_width="wrap_content"

 9 android:layout_height="wrap_content"

10 android:layout_alignParentRight="true"

11 android:layout_alignParentTop="true"

12 android:layout_marginRight="82dp"

13 android:text="返回" / 

15 /RelativeLayout 
复制代码
复制代码
 1 package com.example.activiychange;

 3 import android.app.Activity;

 4 import android.content.Intent;

 5 import android.os.Bundle;

 6 import android.view.View;

 7 import android.view.View.OnClickListener;

 8 import android.widget.Button;

10 public class SecondActivity extends Activity {

12 private Button button1 ;

13 @Override

14 protected void onCreate(Bundle savedInstanceState) {

15 super.onCreate(savedInstanceState);

16 setContentView(R.layout.second);

18 button1 = (Button)findViewById(R.id.button1) ;

20 //为返回按钮绑定监听器

21 button1.setOnClickListener(new OnClickListener() {

23 @Override

24 public void onClick(View arg0) {

25 Intent intent = new Intent(SecondActivity.this,MainActivity.class) ;

26 startActivity(intent) ; 

29 }); 

33 }
复制代码
1 activity 

2 android:name=".SecondActivity"

3 android:label="SecondActivity" 

4 /activity 

 

或者如果不绑定监听器的话,可以对布局文件中的Button添加如下代码:android:

【完整代码】如下:方案二

 

复制代码
 1 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

 2 xmlns:tools="http://schemas.android.com/tools"

 3 android:layout_width="match_parent"

 4 android:layout_height="match_parent"

 5 android:paddingBottom="@dimen/activity_vertical_margin"

 6 android:paddingLeft="@dimen/activity_horizontal_margin"

 7 android:paddingRight="@dimen/activity_horizontal_margin"

 8 android:paddingTop="@dimen/activity_vertical_margin"

 9 tools:context=".MainActivity" 

11 TextView

12 android:id="@+id/textView1"

13 android:layout_width="wrap_content"

14 android:layout_height="wrap_content"

15 android:text="@string/hello_world" / 

17 Button

18 android:id="@+id/button1"

19 android:layout_width="wrap_content"

20 android:layout_height="wrap_content"

21 android:layout_below="@+id/textView1"

22 android:layout_marginTop="22dp"

23 android:onClick="gotoSecondActivity"

24 android:text="启动第二个Activity" / 

26 /RelativeLayout 
复制代码
复制代码
 1 package com.example.smyh004activity01;

 3 import android.app.Activity;

 4 import android.content.Intent;

 5 import android.os.Bundle;

 6 import android.view.Menu;

 7 import android.view.View;

 9 public class MainActivity extends Activity {

11 @Override

12 protected void onCreate(Bundle savedInstanceState) {

13 super.onCreate(savedInstanceState);

14 setContentView(R.layout.activity_main);

15 System.out.println("MainActivity-onCreate");

18 @Override

19 protected void onStart() {

20 super.onStart();

21 System.out.println("MainActivity-onStart");

24 @Override

25 protected void onResume() {

26 super.onResume();

27 System.out.println("MainActivity-onResume");

30 @Override

31 protected void onPause() {

32 super.onPause();

33 System.out.println("MainActivity-onPause");

34 } 

36 @Override

37 protected void onStop() {

38 super.onStop();

39 System.out.println("MainActivity-onStop");

40 } 

43 @Override

44 protected void onRestart() {

45 super.onRestart();

46 System.out.println("MainActivity-onRestart");

50 @Override

51 protected void onDestroy() {

52 super.onDestroy();

53 System.out.println("MainActivity-onDestroy");

57 /*

58 * 通过这个方法跳转到SecondActivity界面

59 */

60 public void gotoSecondActivity(View view){

61 //创建一个意图

62 Intent intent = new Intent(MainActivity.this,SecondActivity.class);

63 startActivity(intent);

66 @Override

67 public boolean onCreateOptionsMenu(Menu menu) {

68 // Inflate the menu; this adds items to the action bar if it is present.

69 getMenuInflater().inflate(R.menu.main, menu);

70 return true;

73 }
复制代码
复制代码
 1 ?xml version="1.0" encoding="utf-8"? 

 2 LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3 android:layout_width="match_parent"

 4 android:layout_height="match_parent"

 5 android:orientation="vertical" 

 7 TextView

 8 android:id="@+id/textView1"

 9 android:layout_width="wrap_content"

10 android:layout_height="wrap_content"

11 android:text="@string/hello_world" / 

13 Button

14 android:id="@+id/button1"

15 android:layout_width="wrap_content"

16 android:layout_height="wrap_content"

17 android:layout_below="@+id/textView1"

18 android:layout_marginTop="22dp"

19 android:onClick="gotoMainActivity"

20 android:text="回到 第一个Activity" / 

22 /LinearLayout 
复制代码
复制代码
 1 package com.example.smyh004activity01;

 3 import android.app.Activity;

 4 import android.content.Intent;

 5 import android.os.Bundle;

 6 import android.view.Menu;

 7 import android.view.View;

 9 public class SecondActivity extends Activity{

11 @Override

12 protected void onCreate(Bundle savedInstanceState) {

13 // TODO Auto-generated method stub

14 super.onCreate(savedInstanceState);

15 setContentView(R.layout.second);

16 System.out.println("SecondActivity-onCreate");

19 @Override

20 protected void onStart() {

21 super.onStart();

22 System.out.println("SecondActivity-onStart");

25 @Override

26 protected void onResume() {

27 super.onResume();

28 System.out.println("SecondActivity-onResume");

31 @Override

32 protected void onPause() {

33 super.onPause();

34 System.out.println("SecondActivity-onPause");

35 } 

37 @Override

38 protected void onStop() {

39 super.onStop();

40 System.out.println("SecondActivity-onStop");

41 } 

44 @Override

45 protected void onRestart() {

46 super.onRestart();

47 System.out.println("SecondActivity-onRestart");

51 @Override

52 protected void onDestroy() {

53 super.onDestroy();

54 System.out.println("SecondActivity-onDestroy");

57 /*

58 * 通过这个方法跳转到SecondActivity界面

59 */

60 public void gotoMainActivity(View view){

61 //创建一个意图

62 Intent intent = new Intent(SecondActivity.this,MainActivity.class);

63 startActivity(intent);

64 finish();//结束当前的Activity

65 //如果没有上面的finish(),那么当跳转到MainActivity之后,SecondActivity只会onStop,不会ondestroy。即仍然还在栈中

66 //需要注意的是,当它跳到MainActivity时,会去重新创建一个新的MainActivity,即执行MainActivity中的onCreate()方法;

69 }
复制代码

生命周期描述如下:

当用户点击当前默认的MainActivity中的按钮后,会跳到SecondActivity。生命周期如下:

启动默认Activity时:

MainActivity:onCreate

MainActivity:onStart

MainActivity: onResume

点击按钮后,跳到SecondActivity:(MainActivity被保留至栈底)

MainActivity:onPause

SecondActivity:onCreate

SecondActivity:onStart

SecondActivity: onResume

MainActivity: onStop

按返回菜单后,回到MainActivity:(SecondActivity被销毁)

SecondActivity: onPause

MainActivity:onRestart

MainActivity:onStart

MainActivity: onResume

SecondActivity: onStop

SecondActivity: onDestroy

 

当用户打开应用程序,之后按Home键返回到主页(或者按电源键,效果是一样的),再回到原来的程序。生命周期描述如下:

启动默认Activity时:

MainActivity:onCreate

MainActivity:onStart

MainActivity: onResume

按Home键返回到主页:

MainActivity:onPause

MainActivity:onStop

再回到原来的程序:

MainActivity:onRestart

MainActivity:onStart

MainActivity:onResume


转 - Android下一次OOM调试过程 线程数超限,即proc/pid/status中记录的线程数(threads项)突破/proc/sys/kernel/threads-max中规定的最大线程数。
【Android】构建安卓项目过程中的一些细节问题全记录 前言 距离安卓项目结束已经过去了好几天,之后很长一段时间我应该都不会再写和安卓有关的项目了。今天偶然翻到之前写的笔记,想了想还是决定整理出来,希望对后来要完成课设的学弟学妹们有帮助。
❤️Android Apk 的打包过程 ❤️ 只需两幅图 官方介绍 在分析安装过程之前,需要先了解一下 Android 项目是如何经过编译- 打包生成最终的 .apk 格式的安装包。谷歌有一张官方图片来描述 apk 的打包流程,如下图所示。
生命壹号 个人网站:smyhvae.com。博客园:cnblogs.com/smyhvae。微信公众号:生命团队 | vitateam