android_activity_研究(二)
这次开始玩玩活动的生命周期。废话不说,先搞个小应用,大体思路是:主界面有两个按钮,一个按钮按下后,出现第二个界面;另一个按钮按下后,出现第三个界面,真他妈简单。
一、主界面:
1. 主界面布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/btnToSecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="callSecondActivity" />
<Button
android:id="@+id/btnToThird"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="callThirdActivity" />
</LinearLayout>
我的神~~~
2. 主界面逻辑代码:
package cn.com.sxp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class ActivityLifeActivity extends Activity {
private static final String TAG = ActivityLifeActivity.class
.getSimpleName();
private Button btnToSecond = null;
private Button btnToThird = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "ActivityLifeActivity onCreate()");
btnToSecond = (Button) this.findViewById(R.id.btnToSecond);
btnToSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityLifeActivity.this,
secondActivity.class);
startActivity(intent);
}
});
btnToThird = (Button) this.findViewById(R.id.btnToThird);
btnToThird.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityLifeActivity.this,
thirdActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
Log.i(TAG, "ActivityLifeActivity onDestroy()");
super.onDestroy();
}
@Override
protected void onPause() {
Log.i(TAG, "ActivityLifeActivity onPause()");
super.onPause();
}
@Override
protected void onRestart() {
Log.i(TAG, "ActivityLifeActivity onRestart()");
super.onRestart();
}
@Override
protected void onResume() {
Log.i(TAG, "ActivityLifeActivity onResume()");
super.onResume();
}
@Override
protected void onStart() {
Log.i(TAG, "ActivityLifeActivity onStart()");
super.onStart();
}
@Override
protected void onStop() {
Log.i(TAG, "ActivityLifeActivity onStop()");
super.onStop();
}
}
漂亮:这样的话,搞出来的界面就是:
跑出来的日志:
可以看到,主界面活动经过了创建、开始、恢复三个状态。
二、第二个界面
1. 界面的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="欢迎来到第二个活动"
/>
</LinearLayout>
很简单,就一个文本框,说着一些废话。
2. 第二个见面的逻辑代码:
package cn.com.sxp;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import cn.com.sxp.R;
public class secondActivity extends Activity {
private static final String TAG = secondActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
Log.i(TAG, "secondActivity onCreate()");
}
@Override
protected void onDestroy() {
Log.i(TAG, "secondActivity onDestroy()");
super.onDestroy();
}
@Override
protected void onPause() {
Log.i(TAG, "secondActivity onPause()");
super.onPause();
}
@Override
protected void onRestart() {
Log.i(TAG, "secondActivity onRestart()");
super.onRestart();
}
@Override
protected void onResume() {
Log.i(TAG, "secondActivity onResume()");
super.onResume();
}
@Override
protected void onStart() {
Log.i(TAG, "secondActivity onStart()");
super.onStart();
}
@Override
protected void onStop() {
Log.i(TAG, "secondActivity onStop()");
super.onStop();
}
}
哇靠,日志打得真JB详细。
3. 看效果
此时,我在主界面按第一个按钮,效果图如下:
再来看日志:
瓦擦,谁能告诉我发生了什么!
主活动暂停了,不过此时你还能看到主界面,只是你不能与之交互了;第二个界面活动经历了创建、开始、恢复变得与客户可见,客户还能操作它;最后,主界面完全不可见了,不过并没有销毁。
好吧,我按下退后按钮,会发生什么?
I can not believe~~~
退回到主界面时,二界面先暂停,他不肯离去;主界面此时并未销毁,因此是重启状态,开始状态,恢复状态;二界面停止,并且销毁。在一个界面,按下退后键应该就是销毁这个活动吧。
从活动栈的角度来说,二界面出现时,主界面是在被入栈的,二界面此时在栈顶;主界面要想重新占据栈顶,必须把现有的栈顶的活动宰掉才行;宰掉就是销毁了。
三、主界面按下退后键呢?
主界面被宰了,被销毁了。
我按下“esc”键,主界面也是被销毁。
四、不不,我不按后退,我按home键
请看日志:
what happened~~~主界面活动没有被销毁,它只是stop~~~stop
当我在手机上重启启动这个主界面,回调的是restart(),Oh~~~what a kidding~~~
五、关于 onSaveInstanceState() 和 onRestoreInstanceState()两个方法呢?更值得研究一下
最新文章
- Jquery 点击图片在弹出层显示大图
- 并发下常见的加锁及锁的PHP具体实现-转载
- 【转】一个lucene的官网例子
- js 的try catch应用
- XE6移动开发环境搭建之IOS篇(6):设置Mac OSX的网络。(有图有真相)
- Delphi dbf文件如何定位记录(即设置Table的RecNum属性来移动到该记录号)
- Java 9 揭秘(16. 虚拟机栈遍历)
- zabbix利用orabbix监控oracle
- openstack第一章:keystone
- CF1139C Edgy Trees
- .net 中写 psql 匿名函数、过程语言
- 背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议
- gentoo 建立本地软件库并安装软件 Custom repository
- 向eclipse的JavaWeb项目中导入jar包
- neo4j CQL 使用
- iOS蓝牙空中升级(固件升级)
- Converting REF CURSOR to PIPE for Performance in PHP OCI8 and PDO_OCI
- 使用CoreData [4]
- python类与对象各个算数运算魔法方法总结
- 转载:Github项目解析(七)-->;防止按钮重复点击
热门文章
- UWP中String类型如何转换为Windows.UI.Color
- C++/CLI 中使用 ref 和 out
- LigerUI中Grid的使用时关于url请求不到数据的问题
- Delphi中TResourceStream流使用
- Debug监视器(监视运行期程序通过API函数OutputDebugString输出的字符串)
- List集合总结,对比分析ArrayList,Vector,LinkedList
- Django 强大的ORM之增删改查
- 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream
- 【静态NAT】 为什么子网可以ping父网,但是父网ping不通子网?
- spring源码深度解析— IOC 之 自定义标签解析