天天看点

Android四大组件之一:Activity

1.Android的介绍

  是一种基于Linux的自由及开放源码的操作系统

  主要使用于移动设备,如智能手机和平板电脑

  由Google公司和开放手机联盟领导和开发

  Android逐渐扩展到平板电脑和其它领域上,如电视,数码相机,游戏机等。

2.Android历史

  [1]Android操作系统最初Andy Rubin开发,主要支持手机。2005年由Google注资收购。

  [2]第一部Android手机发布于2008年10月。生产厂商HTC。

  [3]2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。

  [4]2013第四季度,Android平台手机的全球市场份额已经达到78.1%

  [5]2013年09月24日谷歌开发的操作系统Android迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。

3.编程语言

  C/C++   (Android底层开发)

  java  (Android应用层开发)

4.创建Android工程

  创建工程  File --> new --> AndroidProject --> 填写工程名(命名规则) --> 包名(必须小写)com.exp.myapplication

  src -------存放源码

  res -------存放资源(例如图片,音频,布局文件,字符串等资源)

             drawable-------存放图片,由高中低三种分辨率的文件夹组成

             layout  -------存放布局文件 

             values --------存放文字,颜色值,单位等字符串内容

             raw    --------存放体积较小的音频,视频文件

  gen -------存放资源的索引文件(res中的每一个资源都有一个对应的索引静态常量)

             注意:gen中的文件由系统生成,不允许程序员手动修改

                   索引名是资源名,所以资源一定要符合java标示符的命名规则

  bin -------存放编译后的源码和资源,以及apk包

  assets ----外部资源文件夹,存放资源,且不会在R文件中生成资源的索引。

  AndroidManifest.xml------清单文件,在android程序安装的时候,载入清单文件。

                           清单文件用来描述应用程序的信息

package com.farsight.hello;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

/**
 * @author salkk123 
 * 
 * 
 *         用户开启入口activity时,调用的生命周期方法    onCreate --> onStart --> onResume --> running
 *         
 *         用户点击back按钮时,调用的生命周期方法   onPause --> onStop --> onDestroy --> killed 
 *         
 *         用户点击home按钮时,调用的生命周期方法   onPause --> onStop --> stopped
 * 
 *         用户点击应用程序,activity回到前台,调用生命周期方法   onRestart --> onStart --> onResume --> running		   
 * 
 *         ctrl + Alt + 方向键下 向下复制一行
 * 
 *         ctrl + d 删除一行
 * 
 *         ctrl + shift + f 格式化代码
 *         
 *         Alt + ?  自动提示
 * 
 */
public class Android_01_HelloActivity extends Activity {

	// 创建
	// 在framework层被android系统自动调用
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// 设置当前屏幕上显示的视图
		// 解析布局文件,生成控件对象
		setContentView(R.layout.main);

		// //创建一个文本控件对象
		// TextView tv = new TextView(this);
		// tv.setText("hello android");
		//
		// setContentView(tv);

		// //输出异常信息
		// Log.e("Test", "onCreate");

		// 输出调试信息
		Log.d("Test", "onCreate");

	}

	// 得到画面
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.d("Test", "onStart");
	}

	// 得到焦点
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.d("Test", "onResume");
	}

	// 失去焦点
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.d("Test", "onPause");
	}

	// 失去画面
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.d("Test", "onStop");
	}

	// 销毁
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.d("Test", "onDestroy");
	}
	
	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.d("Test", "onRestart");
	}
}
           

5.标签语言(描述语言)

  <开始标签  标签属性01 = "属性值"

             标签属性02 = "属性值">

       标签内容

       <标签名 属性 = "属性值" />

  </结束标签>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.farsight.hello"
    android:versionCode="1"
    android:versionName="1.0" >

    <!-- 注释语句 -->
    
    <uses-sdk android:minSdkVersion="14" />

    <!-- 描述应用程序基本信息 -->
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        
        <!-- 描述应用程序由一个屏幕组成 -->
        <activity
            android:label="@string/app_name"
            android:name=".Android_01_HelloActivity" >
            
            <!-- 表示该应用程序的入口屏幕为Android_01_HelloActivity -->
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
           

6.Android应用程序安装运行过程描述

  1.安装apk包,载入清单文件AndroidManifest.xml

  2.通过清单文件,得到默认启动的第一个屏幕

  3.调用入口屏幕类中的onCreate方法

  4.执行onCreate中的代码,载入布局文件并解析,生成控件对象,显示到屏幕上。

7.Android四大组件之一:Activity

  [1]Activity(活动类)是应用程序的一个component(组件),它提供一个屏幕,用户可以用来交互完成某项任务。例如打电话,发邮件,玩游戏等等等。

  [2]Activity四种状态

     1.Running  显示在屏幕的最前端

     2.Killed   系统将Activity对象从内存中删除

     3.Paused   屏幕可见,但是失去焦点,无法和用户进行交互

     4.Stoped   不可见

     用户启动应用程序,入口activity处于running状态

     用户按home按钮时,入口activity处于stoped状态

     用户按back按钮时,入口activity处于killed状态

  [3]Activity屏幕的切换

     1.创建Activity的子类

     2.在清单文件中注册该类

     3.制作显示在Activity上的布局文件  new --> Android XML --> 选择Layout --> 注意布局文件名小写

     4.调用setContentView 绑定布局文件

     5.切换屏幕

       Intent intent = new Intent();

       intent.setClass(this, MyActivity.class);

       startActivity(intent);

  [4]Activity生命周期

Android四大组件之一:Activity
package com.farsight.activities;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

//Android是一个以事件驱动的操作系统


public class MainActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //通过按钮资源的索引,取出按钮对象的引用(地址)
        Button btn = (Button) findViewById(R.id.button1);
        Button btnNew = (Button) findViewById(R.id.button2);
        
        //修改按钮对象的文字属性
//        btn.setText(".....");
        
//        //给按钮添加一个监听功能,监听用户点击按钮
//        btn.setOnClickListener(new OnClickListener() {
//			
//        	//当用户点击按钮时,系统自动调用该方法
//			public void onClick(View v) {
//				// TODO Auto-generated method stub
//				Log.e("Test", "onClick");
//			}
//		});
        
        btn.setOnClickListener(this);
        btnNew.setOnClickListener(this);
        
    }

    //用户点击按钮,系统自动调用onClick方法
    //系统传入的参数v,是用户点击的按钮对象的引用
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v.getId() == R.id.button1)
		{
			Log.e("Test", "onClick ...");
			//切换屏幕
			//意图对象(intent) 描述切换屏幕的动作
			Intent intent = new Intent();
			//指定了切换的目标屏幕
			//Context 上下文  是 Activity的父类
			intent.setClass(this, SecondActivity.class);
			//执行意图,启动SecondActivity
			startActivity(intent);
			
		}
		else if(v.getId() == R.id.button2)
			Log.e("Test", "onClick button");
	}
}
           
package com.farsight.activities;

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_second);
	}
	
}
           
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.farsight.activities"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="14" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name="MainActivity" >

            <!-- 包含该标签的activity为入口activity -->
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity android:name="SecondActivity" >
           
        </activity>
        
    </application>

</manifest>
           

1.Activity组件

  [1]Activity之间的数据传输,使用意图对象。

     保存数据  key数据的标记。 value存放的数据

     intent.putExtra(key, value);

     取数据

     Intent intent = this.getIntent();

     value = intent.getStringExtra(key);

package com.farsight.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

public class Android_04_IntentActivity extends Activity {
	EditText etUser;
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        etUser = (EditText) findViewById(R.id.editText1); 
        final EditText etPass = (EditText) findViewById(R.id.editText2); 
        
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				Intent intent = new Intent();
				intent.setClass(Android_04_IntentActivity.this, InfoActivity.class);
				//在内部类中,只能引用局部常量。
				String number1 = etUser.getText().toString();
				String number2 = etPass.getText().toString();
				intent.putExtra("number1", number1);
				intent.putExtra("number2", number2);
				
				startActivity(intent);
			}
		});
    }
}
           

2.Intent意图

  a.指定要跳转的Acitivity屏幕。

  b.传递数据,将当前Activity中的数据传递到将要跳转的Activity中。

package com.farsight.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class InfoActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_info);
		
		Intent intent = this.getIntent();
		String number1 = intent.getStringExtra("number1");
		String number2 = intent.getStringExtra("number2");
		
		int n1 = Integer.parseInt(number1);
		int n2 = Integer.parseInt(number2);
		
		TextView tv = (TextView) findViewById(R.id.textView1);
		tv.setText(number1 + "+" + number2 + "=" + (n1 + n2));
	}
}
           

3.Activity任务栈

  内存中的所有activity对象全部存放在任务栈(Task)中

  应用程序显示的是栈顶的activity对象

  当启动新的activity时,入栈

  当销毁activity时,出栈

package com.farsight.back;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class Android_05_BackActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Android_05_BackActivity.this.finish();
			}
		});
    }
    
    //用户按物理键时,系统调用该方法
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    	// TODO Auto-generated method stub
    	
    	Toast.makeText(this, "按键", Toast.LENGTH_SHORT).show();
    	
    	if(keyCode == KeyEvent.KEYCODE_BACK){
    		this.finish(); //可以关闭activity
    		return true;
    	}
    	
    	return super.onKeyDown(keyCode, event);
    }
}
           

4.Activity启动模式

  设置:在清单文件activity标签中lauchMode属性。默认属性standard。

  1.standard模式:在切换屏幕时,创建activity对象

  2.singleTop模式:在切换屏幕之前,系统检测栈顶元素是否为新切换的屏幕类型,如果是,不再创建activity对象。

  3.singleTast模式:在切换屏幕之前,系统检测到任务栈中有和它类型一致的屏幕,那么activity对象上所有对象出栈。

  4.singleInstance模式:在android系统的所有任务栈中只有一个activity对象。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.farsight.lauchmode"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="14" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="SecondActivity"
            android:launchMode="singleTop"></activity>
        <activity android:name="ThirdActivity"></activity>
    </application>

</manifest>
           

继续阅读