zoukankan      html  css  js  c++  java
  • 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()两个方法呢?更值得研究一下

  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/itblog/p/7236637.html
Copyright © 2011-2022 走看看