• 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()两个方法呢?更值得研究一下

  • 相关阅读:
    编译 出错
    关于工程思维
    关于大屏拼接方案 触摸屏 红外 和 电容屏
    爱宝A-1180热转印条码打印机 打印乱码,对不齐的问题
    制作 企业微场景 邀请函
    《七年就是一辈子》 逻辑思维 互联网 得到
    Python妙用re.sub分析正则表达式匹配过程
    第11.25节 Python正则表达式编译re.compile及正则对象使用
    Python正则表达式书写容易碰到的陷阱:W*和W*?匹配过程遇到的问题
    Python正则表达式W+和W*匹配过程的深入分析
  • 原文地址:https://www.cnblogs.com/itblog/p/7236637.html
Copyright © 2020-2023  润新知