Activity是用户和程序交互的界面
一、如何创建Activity?
1.创建一个继承Android的Activity类
2.重写onCreate()方法
3.设置显示布局
4.在使用前,要在AndroidManifest文件中,进行注册
二、Activity的生命周期(7个方法)
1.onCreate();创建
2.onStart();运行
3.onResume();获取焦点
4.onPause();失去焦点
5.onStop();暂停
6.onDestroy();销毁
7.onRestart();再次运行
三、Activity的四种活动状态
1.活动状态(Active/Running) Activity处于界面最顶端,获取焦点
2.暂停状态(Paused) Activity失去焦点,但用户可见
3.停止状态(Stopped) Activity完全被遮挡,但保留所有的状态和成员信息
4.非活动状态(Killed)Activity被停止,被销毁
5.在代码中通过Log日志来具体看其生命周期
1.MyActivity.java代码
package com.zero.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MyActivity extends Activity {
final String TAG="tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "MyActivity-->onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "MyActivity-->onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "MyActivity-->onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "MyActivity-->onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "MyActivyty-->onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "MyActivity-->onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "MyActivity-->onRestart");
}
}
2.main_activity.xml代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.oldtogether.activitytest.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textColor="#f00"
android:textSize="32sp"/>
</RelativeLayout>
3.注册自定义的Activity,设置为主接口,即AndroidManifest.xml代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.oldtogether.activitytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.oldtogether.activitytest.MyActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
6.从运行的Log日志可以看出来:
1.在启动的过程中先调用onCreate、onStart、onResume,这三个方法,当退出(按返回键的时候)的时候会调用onPause、onStop、onDestroy
2.从启动到后台,然后再在后台运行,直接贴图
四、实现简单的页面跳转
1.在activity_main.xml中添加一个按钮
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.oldtogether.activitytest.MainActivity" >
<Button
android:id="@+id/btn_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动第二个Activity"/>
</RelativeLayout>
2.在MyActivity.java中为按钮添加事件监听器(使用匿名内部类的方法)代码如下:
package com.oldtogether.activitytest;
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;
public class MyActivity extends Activity {
final String TAG = "tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btn_show);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MyActivity.this,SecondActivity.class);
startActivity(intent);
}
});
Log.i(TAG, "MyActivity-->onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "MyActivity-->onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "MyActivity-->onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "MyActivity-->onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "MyActivity-->onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "MyActivyty-->onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "MyActivyty-->onRestart");
}
}
3.重新创建一个SecondActivity.java(让此类继承Activity并重写onCreate方法)
package com.oldtogether.activitytest;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_show);
}
}
4.重新创建一个简单的线性布局即:Second_show.xml,包含一个TextView来显示界面内容,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是第二个Activity"
android:textColor="#0ff"
android:textSize="32sp"/>
</LinearLayout>
5.在AndroidManifest.xml中注册新建的SecondActivity,并让MyActivity为主接口
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.oldtogether.activitytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.oldtogether.activitytest.MyActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"/>
</application>
</manifest>
6.运行结果
1.启动MyActivity时调用的方法(创建、运行、获得焦点)
2.启动SecondActivity时,MyActivity所调用的方法(失去焦点、暂停)
3.返回SecondActivity时,回到了MyActivity调用的方法(再次运行、运行、又获得焦点)
4.退出MyActivity调用的方法(失去焦点、停止、销毁)
5.所有方法调用全图
五、启动和关闭Activity
1.启动Activity方法一:在AndroidManifest.xml文件中进行注册,将其设置为程序主入口,这样在运行该Progect是自动启动我们设置主入口的XX_Activity;
2.启动Activity方法二:用startActivity()方法来启动Activity,在意图中,需要指明主调用(XX_Activity.this)和被调用的Activity(XXX_Activity.class),核心代码如下,。
Intent intent=new Intent(XX_Activity.this,XXX_Activity.class);
startActivity(intent);
3.关闭Activity,使用Activity类中提供的finish()方法,即一个裸露(无参数,无返回值)的方法:public void finish();只需要在相应的事件中调用该方法即可。
六、心得总结
1.onResume,获得焦点,即MyActivity在手机桌面上;
2.onPause,失去焦点,有时候当我们玩游戏的时候,突然来了个电话,则此方法被执行,虽然失去焦点,但是其在后台运行的,即将游戏的状态持久的保存起来;
3.onCreate()和onPause()是最常重写的两个方法,即创建时候出现什么复杂业务逻辑,失去焦点后出现什么业务逻辑;
4.如果当前Activity不是猪活动,那么执行finish()方法后,将返回调用它的那个Activity;否则,将返回主屏幕。
作者:OldTogether 发表于2016/12/7 21:45:24 原文链接
阅读:22 评论:0 查看评论