Android提高第四篇之Activity+Intent

Android提高第四篇之Activity+Intent

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。

先贴出本文运行截图:

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

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

main1.xml的源码:


  1. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.         android:orientation="vertical" android:layout_width="fill_parent"
  3.         android:layout_height="fill_parent">
  4.         <button android:layout_width="wrap_content" 
  5.                 android:layout_height="wrap_content" android:id="@+id/main1.Button01"
  6.                 android:text="跳转到Activity2">
  7.         <edittext android:text="@+id/EditText01" android:id="@+id/EditText01" 
  8.                 android:layout_width="wrap_content" android:layout_height="wrap_content">
  9.         <button android:layout_width="wrap_content" 
  10.                 android:layout_height="wrap_content" android:id="@+id/main1.Button02"
  11.                 android:text="跳转到外部Activity">

复制代码
main2.xml的源码:


  1. <linearlayout android:id="@+id/LinearLayout01" 
  2.         android:layout_width="fill_parent" android:layout_height="fill_parent"
  3.         xmlns:android="http://schemas.android.com/apk/res/android">
  4.         <button android:layout_width="wrap_content" 
  5.                 android:layout_height="wrap_content" android:id="@+id/main2.Button01"
  6.                 android:text="返回Activity1">

复制代码
Activity1的源码:

  1. package com.testActivityIntent;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.content.SharedPreferences;
  5. import android.net.Uri;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. public class testActivityIntent extends Activity {
  12.     /** Called when the activity is first created. */
  13.         Button btnToInternalActivity;
  14.         Button btnToExternalActivity;
  15.         EditText tbBundle;
  16.     @Override
  17.     public void onCreate(Bundle savedInstanceState) {
  18.         super.onCreate(savedInstanceState);
  19.         Log.e("Activity1", "onCreate");//显示当前状态,onCreate与onDestroy对应
  20.         setContentView(R.layout.main1);
  21.         
  22.         btnToInternalActivity=(Button)this.findViewById(R.id.main1_Button01);
  23.         btnToExternalActivity=(Button)this.findViewById(R.id.main1_Button02);
  24.         btnToInternalActivity.setOnClickListener(new ClickEvent());
  25.         btnToExternalActivity.setOnClickListener(new ClickEvent());
  26.         tbBundle=(EditText)this.findViewById(R.id.EditText01);        
  27.     }
  28.     public void onDestroy()
  29.     {
  30.             super.onDestroy();
  31.             Log.e("Activity1", "onDestroy");//显示当前状态,onCreate与onDestroy对应
  32.     }
  33.     @Override
  34.     public void onStart()
  35.     {
  36.             super.onStart();
  37.             Log.e("Activity1", "onStart");//显示当前状态,onStart与onStop对应        
  38.     }
  39.     @Override
  40.     public void onStop()
  41.     {
  42.             super.onStop();
  43.             Log.e("Activity1", "onStop");//显示当前状态,onStart与onStop对应        
  44.     }
  45.     @Override
  46.     public void onRestart()
  47.     {
  48.             super.onRestart();
  49.             Log.e("Activity1", "onRestart");
  50.     }
  51.     @Override
  52.     public void onResume()
  53.     {
  54.             super.onResume();
  55.             Log.e("Activity1", "onResume");//显示当前状态,onPause与onResume对应        
  56.             SharedPreferences prefs = getPreferences(0); //SharedPreferences 用于存储数据
  57.         String restoredText = prefs.getString("editText01", null);
  58.         if (restoredText != null) {
  59.                 this.tbBundle.setText(restoredText);
  60.         }
  61.     }
  62.     @Override
  63.     public void onPause()
  64.     {
  65.             super.onResume();
  66.             Log.e("Activity1", "onPause");//显示当前状态,onPause与onResume对应        
  67.             //保存文本框的内容,使得重回本Acitivity的时候可以恢复
  68.             SharedPreferences.Editor editor = getPreferences(0).edit();//SharedPreferences 用于存储数据
  69.         editor.putString("editText01", this.tbBundle.getText().toString());
  70.         editor.commit();
  71.     }
  72.     
  73.     class ClickEvent implements View.OnClickListener{
  74.                 @Override
  75.                 public void onClick(View v) {
  76.                         if(v==btnToInternalActivity)
  77.                         {
  78.                                 Intent intent = new Intent();
  79.                     intent.setClass(testActivityIntent.this,Activity2.class);
  80.                     
  81.                     //new一个Bundle对象,并将要传递的数据传入
  82.                     Bundle bundle = new Bundle();
  83.                     bundle.putString("Text",tbBundle.getText().toString());
  84.                   
  85.                     //将Bundle对象assign给Intent
  86.                     intent.putExtras(bundle);
  87.                   
  88.                     //调用Activity2
  89.                     startActivity(intent);
  90.                     
  91.                     testActivityIntent.this.finish();//会触发onDestroy();
  92.                         }
  93.                         else if(v==btnToExternalActivity)
  94.                         {
  95.                                 //有些外部调用需要开启权限
  96.                                 Uri uri = Uri.parse("http://google.com");   
  97.                                 Intent it = new Intent(Intent.ACTION_VIEW, uri);   
  98.                                 startActivity(it); 
  99.                         }
  100.                         
  101.                 }
  102.             
  103.     }
  104.     
  105. }
复制代码
Activity2的源码:

  1. package com.testActivityIntent;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. public class Activity2  extends Activity {
  9.         Button btnBackMain1;
  10.         public void onCreate(Bundle savedInstanceState)
  11.           {
  12.             super.onCreate(savedInstanceState);
  13.             Log.e("Activity2", "onCreate");//显示当前状态,onCreate与onDestroy对应
  14.             
  15.             //加载activity2.xml
  16.             setContentView(R.layout.main2);
  17.             
  18.             //得Intent中的Bundle对象
  19.             Bundle bunde = this.getIntent().getExtras();
  20.             //取得Bundle对象中的数据 
  21.             Log.i("In_Text", bunde.getString("Text"));
  22.                 btnBackMain1=(Button)this.findViewById(R.id.main2_Button01);
  23.                 btnBackMain1.setOnClickListener(new ClickEvent());
  24.           }
  25.         
  26.     public void onDestroy()
  27.     {
  28.             super.onDestroy();
  29.             Log.e("Activity2", "onDestroy");//显示当前状态,onCreate与onDestroy对应
  30.     }
  31.     @Override
  32.     public void onStart()
  33.     {
  34.             super.onStart();
  35.             Log.e("Activity2", "onStart");//显示当前状态,onStart与onStop对应        
  36.     }
  37.     @Override
  38.     public void onStop()
  39.     {
  40.             super.onStop();
  41.             Log.e("Activity2", "onStop");//显示当前状态,onStart与onStop对应        
  42.     }
  43.     @Override
  44.     public void onRestart()
  45.     {
  46.             super.onRestart();
  47.             Log.e("Activity2", "onRestart");        
  48.     }
  49.     @Override
  50.     public void onResume()
  51.     {
  52.             super.onResume();
  53.             Log.e("Activity2", "onResume");//显示当前状态,onPause与onResume对应                
  54.     }
  55.     @Override
  56.     public void onPause()
  57.     {
  58.             super.onResume();
  59.             Log.e("Activity2", "onPause");//显示当前状态,onPause与onResume对应        
  60.     }
  61.     
  62.     class ClickEvent implements View.OnClickListener{
  63.                 @Override
  64.                 public void onClick(View v) {
  65.                         if(v==btnBackMain1)
  66.                         {
  67.                                 
  68.                                 Intent intent = new Intent();
  69.                     intent.setClass(Activity2.this,testActivityIntent.class);
  70.                     
  71.                     //调用Activity1
  72.                     startActivity(intent);
  73.                     
  74.                     Activity2.this.finish();//会触发onDestroy();
  75.                         }
  76.                         
  77.                 }
  78.             
  79.     }
  80. }
复制代码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值