Android Activity与Intent详解及示例代码

作者:lqh 时间:2023-07-13 17:10:33 

Android有三个基础组件Activity,Service和BroadcastReceiver,他们都是依赖Intent来启动。本文介绍的是Activity的生命周期以及针对Activity的Intent使用。

       之前的例子一直都是使用Activity,在一个Layout XML与一个Activity捆绑的情况下可以视为一个Form,多个Layout XML与一个Activity捆绑的话那就是个Application本身了。Intent可以分为显式Intent和隐式Intent:显式Intent用于启动明确的目标组件(前面所说的三大组件),同一个Application内的多个Activity调用也是显式Intent;隐式Intent就是调用没有明确的目标组件,可以是系统也可以是第三方程序。隐式Intent一般用于调用系统组件功能,相关例程都是网络上很容易找到的(调用某些系统组件的时候要申请权限)。

       Acitivity的运行状况分为:onCreate、onDestroy、onStart、onStop、onRestart、onResume、onPause,onCreate对应onDestroy,onStart对应onStop,onResume对应onPause。

       先贴出本文运行截图:

Android Activity与Intent详解及示例代码

Android Activity与Intent详解及示例代码

       这个是从Acitivity1转到Activity2的时候,Acitivity1的状态变化,使用了finish()会触发onDestroy()。

Android Activity与Intent详解及示例代码

       这个是从Activity2转到Activity1的时候,Acitivity2的状态变化。从两次Activity的启动可以看出,流程是onCreate()->onStart()->onResume()三个方法,销毁是onPause()->onStop()->onDestroy()。另外,要往工程添加第二个Activity,需要到AndroidManifest.xml->Application那里添加Activity2。

  main1.xml的源码:

XML/HTML代码


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:id="@+id/main1.Button01"
   android:text="跳转到Activity2"></Button>
 <EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
   android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
 <Button android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:id="@+id/main1.Button02"
   android:text="跳转到外部Activity"></Button>
</LinearLayout>

main2.xml的源码:

XML/HTML代码


<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android">
 <Button android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:id="@+id/main2.Button01"
   android:text="返回Activity1"></Button>
</LinearLayout>

   Activity1的源码:


package com.testActivityIntent;  
import android.app.Activity;  
import android.content.Intent;  
import android.content.SharedPreferences;  
import android.net.Uri;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  
public class testActivityIntent extends Activity {  
 /** Called when the activity is first created. */
 Button btnToInternalActivity;  
 Button btnToExternalActivity;  
 EditText tbBundle;  
 @Override
 public void onCreate(Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
   Log.e("Activity1", "onCreate");//显示当前状态,onCreate与onDestroy对应  
   setContentView(R.layout.main1);  

btnToInternalActivity=(Button)this.findViewById(R.id.main1_Button01);  
   btnToExternalActivity=(Button)this.findViewById(R.id.main1_Button02);  
   btnToInternalActivity.setOnClickListener(new ClickEvent());  
   btnToExternalActivity.setOnClickListener(new ClickEvent());  
   tbBundle=(EditText)this.findViewById(R.id.EditText01);      
 }  
 public void onDestroy()  
 {  
   super.onDestroy();  
   Log.e("Activity1", "onDestroy");//显示当前状态,onCreate与onDestroy对应  
 }  
 @Override
 public void onStart()  
 {  
   super.onStart();  
   Log.e("Activity1", "onStart");//显示当前状态,onStart与onStop对应  
 }  
 @Override
 public void onStop()  
 {  
   super.onStop();  
   Log.e("Activity1", "onStop");//显示当前状态,onStart与onStop对应  
 }  
 @Override
 public void onRestart()  
 {  
   super.onRestart();  
   Log.e("Activity1", "onRestart");  
 }  
 @Override
 public void onResume()  
 {  
   super.onResume();  
   Log.e("Activity1", "onResume");//显示当前状态,onPause与onResume对应  
   SharedPreferences prefs = getPreferences(0); //SharedPreferences 用于存储数据  
   String restoredText = prefs.getString("editText01", null);  
   if (restoredText != null) {  
     this.tbBundle.setText(restoredText);  
   }  
 }  
 @Override
 public void onPause()  
 {  
   super.onResume();  
   Log.e("Activity1", "onPause");//显示当前状态,onPause与onResume对应  
   //保存文本框的内容,使得重回本Acitivity的时候可以恢复  
   SharedPreferences.Editor editor = getPreferences(0).edit();//SharedPreferences 用于存储数据  
   editor.putString("editText01", this.tbBundle.getText().toString());  
   editor.commit();  
 }  

class ClickEvent implements View.OnClickListener{  
   @Override
   public void onClick(View v) {  
     if(v==btnToInternalActivity)  
     {  
       Intent intent = new Intent();  
       intent.setClass(testActivityIntent.this,Activity2.class);  

//new一个Bundle对象,并将要传递的数据传入  
       Bundle bundle = new Bundle();  
       bundle.putString("Text",tbBundle.getText().toString());  

//将Bundle对象assign给Intent  
       intent.putExtras(bundle);  

//调用Activity2  
       startActivity(intent);  

testActivityIntent.this.finish();//会触发onDestroy();  
     }  
     else if(v==btnToExternalActivity)  
     {  
       //有些外部调用需要开启权限  
       Uri uri = Uri.parse("http://google.com");  
       Intent it = new Intent(Intent.ACTION_VIEW, uri);  
       startActivity(it);  
     }  

}  

}  

}

   Activity2的源码:


package com.testActivityIntent;  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
public class Activity2 extends Activity {  
 Button btnBackMain1;  
 public void onCreate(Bundle savedInstanceState)  
  {  
   super.onCreate(savedInstanceState);  
   Log.e("Activity2", "onCreate");//显示当前状态,onCreate与onDestroy对应  

//加载activity2.xml  
   setContentView(R.layout.main2);  

//得Intent中的Bundle对象  
   Bundle bunde = this.getIntent().getExtras();  
   //取得Bundle对象中的数据  
   Log.i("In_Text", bunde.getString("Text"));  
   btnBackMain1=(Button)this.findViewById(R.id.main2_Button01);  
   btnBackMain1.setOnClickListener(new ClickEvent());  
  }  

public void onDestroy()  
 {  
   super.onDestroy();  
   Log.e("Activity2", "onDestroy");//显示当前状态,onCreate与onDestroy对应  
 }  
 @Override
 public void onStart()  
 {  
   super.onStart();  
   Log.e("Activity2", "onStart");//显示当前状态,onStart与onStop对应  
 }  
 @Override
 public void onStop()  
 {  
   super.onStop();  
   Log.e("Activity2", "onStop");//显示当前状态,onStart与onStop对应  
 }  
 @Override
 public void onRestart()  
 {  
   super.onRestart();  
   Log.e("Activity2", "onRestart");    
 }  
 @Override
 public void onResume()  
 {  
   super.onResume();  
   Log.e("Activity2", "onResume");//显示当前状态,onPause与onResume对应    
 }  
 @Override
 public void onPause()  
 {  
   super.onResume();  
   Log.e("Activity2", "onPause");//显示当前状态,onPause与onResume对应  
 }  

class ClickEvent implements View.OnClickListener{  
   @Override
   public void onClick(View v) {  
     if(v==btnBackMain1)  
     {  

Intent intent = new Intent();  
       intent.setClass(Activity2.this,testActivityIntent.class);  

//调用Activity1  
       startActivity(intent);  

Activity2.this.finish();//会触发onDestroy();  
     }  

}  

}  
}
标签:Android,Activity,Intent
0
投稿

猜你喜欢

  • RecycleView实现各种尺寸图片展示

    2021-09-05 05:05:21
  • Android仿考拉全局滑动返回及联动效果的实现方法

    2021-06-01 03:41:03
  • 游戏开发之随机概率的选择算法

    2022-08-26 13:21:09
  • C#泛型类创建与使用的方法

    2023-02-28 21:26:36
  • Android Camera2采集摄像头原始数据

    2021-06-23 22:55:53
  • RecyclerView实现拖拽排序效果

    2022-09-14 01:23:40
  • MyBatis常用的jdbcType数据类型

    2023-09-18 19:09:35
  • C#根据http和ftp图片地址获取对应图片

    2023-06-06 02:00:23
  • Java实现在线聊天室(层层递进)

    2022-06-13 11:03:47
  • C#将图片和字节流互相转换并显示到页面上

    2021-08-18 23:41:31
  • Java使用sftp定时下载文件的示例代码

    2022-11-14 06:11:47
  • java web中的servlet3 upload上传文件实践

    2021-07-09 08:33:28
  • java 集合----Map、Collection

    2022-11-09 03:39:01
  • Redisson公平锁的源码解读分享

    2022-12-13 01:20:40
  • flutter日期选择器 flutter时间选择器

    2023-09-22 04:50:15
  • Compose开发之动画艺术探索及实现示例

    2023-09-13 04:16:16
  • IDEA 2020.3最新永久激活码(免费激活到 2099 年,亲测有效)

    2023-07-14 05:37:43
  • 只需两步实现Eclipse+Maven快速构建第一个Spring Boot项目

    2023-08-03 23:47:43
  • JAVA实现KMP算法理论和示例代码

    2021-08-06 07:13:44
  • Android Studio中debug功能详解

    2022-05-22 08:16:01
  • asp之家 软件编程 m.aspxhome.com