您的位置:首页 > 移动开发 > Android开发

Android四大组件之一:Activity

2015-07-15 20:33 597 查看
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生命周期



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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: