Activity基本详讲

来源:互联网 发布:淘宝运险费是什么意思 编辑:程序博客网 时间:2024/06/07 01:17

 Activity的概述:

顾名思义,Activity就是活动的意思。在Android中,Activity代表手机屏幕的一屏,或是平板电脑中的一个窗口。它是Android应用中的重要组成单元之一,提供了和用户交互的可视化界面。在一个Activity中,可以添加很多组件,这些组件负责具体的功能。

      在Android应用中,可以有多个Activity,这些Activity组成了Activity栈(Stack) ,当前活动的Activity位于栈顶,之前的Activity被压入下面,成为非活动的Activity,等待是否可能被恢复为活动状态.在Activity的生命周期中,有如下4个重要状态:

  


Activity的生命周期:

  

Activity的生命周期中有以下方法会被系统回调:

        onCreate():在创建Activity时被回调。该方法是最常见的方法,在Eclipse中创建Android项目时,会自动创建一个Activity,在该Activity中,默认重写了onCreate(Bundle savedInstanceState)方法,用于对该Activity执行初始化。

       onStart():启动Activity会被回调,也就是当一个Activity变为现时被回调。

onRestart():重新启动Activity时会被回调,该方法总是在onStart()方法以后执行。

onPause():暂停Activity时被回调。该方法需要被非常快速的执行,因为直到该方法执行完毕后,下一个Activity才能被恢复。在该方法中,通常用于持久保存数据。列如:当我们正在玩游戏的时候,突然来了一个电话,这是就可以在该方法中将游戏状态持久保存起来。

onResume():当Activity由暂停状态恢复为活动状态时调用。调用该方法后,该Activity位于Activity栈的栈顶。

onStop():停止Activity时被回调。

onDestroy():销毁Activity时被回调。

  在Activity中,可以根据程序的需要来重写相应的方法。通常情况下,onCreate()和onPause()方法是最常用的,经常需要重写这两个方法。


 下面是Activity的生命周期图:

   


  实现应用对话框主题的关于Activity

      代码如下:

       AboutActivity:

         

package com.example.mytest;import android.app.Activity;import android.content.Context;import android.graphics.Color;import android.os.Bundle;import android.view.WindowManager;import android.widget.RelativeLayout;import android.widget.TextView;public class AboutActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);RelativeLayout rel = new RelativeLayout(this);WindowManager.LayoutParams layoutParams = getWindow().getAttributes();layoutParams.width = 500;layoutParams.height = 400;layoutParams.alpha = 100;WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);  int width = wm.getDefaultDisplay().getWidth();//屏幕宽度  int height = wm.getDefaultDisplay().getHeight(); layoutParams.x = 0; layoutParams.y = -height;rel.setLayoutParams(layoutParams);//rel.setPadding(20, 20, 20, 20);rel.setBackgroundColor(Color.rgb(120, 110 , 224));TextView tv = new TextView(this);tv.setTextSize(24);tv.setText("我是Activity窗体");rel.addView(tv);setContentView(rel);}}

 在AndroidMainifest.xml中的配置:

   

  <activity             android:name=".AboutActivity"            android:theme="@android:style/Theme.Dialog"            />
  


   多个Activity的使用:

   使用Bundle在Activity之间交换数据:

       注释:Bundle是一个字符串值到各种Parcelable类型的映射,用于保存要携带的数据包

       Intent作为两个Activity之间的交互桥梁,所以只要将数据保存在Intent中,就可以将其传递到另一个Activity中了。

 在Android中,可以将要保存的数据存放在Bundle对象中,然后通过Intent提供的putExtras()方法将要携带的数据保存到Intent中。

     Activity间传递数据有两种方式:单向传递和双向传递。

    单向传递:

        在MainActivity中:(由MainActivity向AboutActivity传递数据)

     

Intent intent = new Intent(MainActivity.this,AboutActivity.class);Bundle bundle = new Bundle();String name = "xiaoming";int pwd = 123;bundle.putString("name", "xiaoming");bundle.putInt("pwd", pwd);intent.putExtras(bundle);

在AboutActivity中:(在AboutActivity中接受数据)
  

Intent intent = getIntent();Bundle bundle = intent.getExtras();String name = bundle.getString("name");int pwd = bundle.getInt("pwd");

  双向传递数据:

    MainActivity:

int REQUEST_CODE = 200;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent(MainActivity.this,AboutActivity.class);Bundle bundle = new Bundle();String name = "xiaoming";int pwd = 123;bundle.putString("name", "xiaoming");bundle.putInt("pwd", pwd);intent.putExtras(bundle);startActivityForResult(intent, REQUEST_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(requestCode == 200 && resultCode == 200){Bundle bundle = data.getExtras();String name = bundle.getString("name");int pwd = bundle.getInt("pwd");}}

   AboutActivity:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();Bundle bundle = intent.getExtras();String name = bundle.getString("name");int pwd = bundle.getInt("pwd");}public void finisActivity(){int RESULT_CODE = 200;Intent intent = new Intent();Bundle bundle = new Bundle();String name = "xiaoming";int pwd = 123;bundle.putString("name", "xiaoming");bundle.putInt("pwd", pwd);intent.putExtras(bundle);setResult(RESULT_CODE, intent);finish();}

  以上就是Activity的基本使用方式,其实Activity要真正研究还是有点深的,比如Activity的启动栈运行的理解和运用。


0 0
原创粉丝点击