Android组件系列----当前Activity跳转到另一个Activity的详细过程
(1)定义一个类,继承Activity
(2)在该类当中,复写Activity当中的onCreate()方法
(3)在AndroidManifest.xml文件中注册该Activity
详细解释如下:
(1)定义一个类,继承Activity:在src文件夹里面的包中新建一个class文件,可命名为:SecondActivity.java
(2)在该类当中,复写Activity当中的onCreate()方法:在菜单栏选择Source--- Override/Implement Methods,弹出框,选择其中的onCreate()方法:
注:onCreate()方法是Activity运行的入口。
紧接着,在layout文件夹中,为该Activity添加布局文件:(文件名必须为小写)
在该布局文件中添加一个 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
相关文章
- android 读取本地数据库db文件(Android sqlite)
- android系统签名工具,android应用实现重启系统+签名「建议收藏」
- Android四大组件Broadcast中注册广播registerReceiver流程源代码详解
- Android 四大组件之一:BroadCastReceiver动态注册广播流程
- countdown timer plus_android studio计时器
- android进程间通信的方式_Android进程注入
- Android Services Library_android freeware
- Android艺术开发探索学习 之 测量view的宽高 以及 动态设置View的位置
- 【Android从零单排系列四】《来运行我们的第一个程序吧》
- 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application )
- 【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 下载 DB Browser 安装包 | 安装 DB Browser 工具 )
- Android设置透明效果的三种方法详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- Android中android:visibility的3中属性的剖析详解手机开发
- Android 手机保持屏幕高亮详解编程语言
- Android改用AAB安装包会成为鸿蒙的绊脚石吗?并不会
- Android系统与Linux之间的联系(android和linux)
- 70% 的 Android 设备被曝发现可获得最高权限的安全漏洞!
- Android蓝牙开发深入解析
- Android获取经纬度计算距离介绍
- Android提高之模拟信号示波器的实现