Activity

曾经,我这么理解Activity:每个Activity对应一个界面。

其实这样的理解应该算有点沾边了,实际上每个Activity一般对应一个单独的页面,但是Activity并不是用来新建界面的,Activity作为android组件中最基本也是最常见的四大组件之一,是负责与用户交互的,可以把控件放到上面也可以监听并处理用户事件并作出响应。

Activity为android应用提供了可视化用户界面,开发者可以通过setContentView()方法设置显示内容:

setContentView(R.layout.main);

如上面的那一行代码,调用的是布局文件中名为main的文件,如果预先在main.xml中设置好控件并布局好位置,那么调用之后就可以在窗口显示了。



Activity的生命周期

在网上看到了典型的Activity生命周期的流程图如下图:


图片已经很清楚的告诉我们Activity的生命周期从onCreate开始到onStop结束。


简单的说Activity可以分成四个状态:

1.运行状态:就是图片上Activity is running以上的那部分;

2.暂停状态:onPause(),暂停状态是指Acitivty处于暂停状态,并且在屏幕上还是可见的;

3.停止状态:onStop(),停止状态其实跟暂停状态差不多,区别在于屏幕上不可见;

4.结束状态(此状态不属于生命周期内):处于暂停状态或者停止状态的Activity,终止其进程。




为了更好的了解Activity的生命周期,请看下面的代码:

public class ActivityDemoActivity extends Activity {
   

	
	/** Called when the activity is first created. */
    @Override
    /**
     * 第一个方法是activity的生命周期的开始,onCreate,这是activity的创建
     * 原有的activity进程意外中断后也是调用此方法重新创建
     */
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main); 
    } 
   @Override 
   /**
    * 创建Activity之后要让它开始工作,onStart是让activity开始工作的方法,
    */
    protected void onStart() { 
    } 
   @Override
   /**
    * * 当activity处于onStop的时候,要想恢复activity进程也是调用此方法,因为处于onStop的activity的进程并没有结束,只是停止了而已并不需要重新创建
    * 但是处于onRestart状态的activity只是处于堆栈的顶部,处于可运行状态,还需要调用onStart
    */
   protected void onRestart() { 
   } 
   @Override 
   /**
    * 此方法是让处于onPause状态的activity恢复到运行状态
    */
   protected void onResume() { 
   } 
    @Override 
    /**
     * 当acticity被弹出的对话框或者透明的界面挡住的时候,activity将处于此状态(也就是说当activity失去焦点但是还是可见的时候处于此状态)
     * 并且此状态activity运行时所有的数据还保存着,调用onResume之后可以恢复到原来的状态
     */
    protected void onPause() {  
    } 
    @Override 
    /**
     * 当一个activity处于不可见状态的时候,用户不再与它交互,此时它就处于此状态。
     */
    protected void onStop() { 
    } 
    @Override 
    /**
     * 此状态不属于activity的生命周期,但是每个activity都必经这个状态
     * 当activity处于onStop状态时,并且不再被调用时,就会被销毁,此时就需要这个方法了
     */
    protected void onDestroy() { 
    } 
 }


上面的代码只是自己理解并没有经常证明,后面学习了下Log标签,这是个好东西啊,相当于java的system.out.print,然后在上面的代码上加上了Log标签,打印了处于各个状态的情况:

package my.demo.activity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class ActivityDemoActivity extends Activity {
   

	
	/** Called when the activity is first created. */
    @Override
    /**
     * 第一个方法是activity的生命周期的开始,onCreate,这是activity的创建
     * 原有的activity进程意外中断后也是调用此方法重新创建
     */
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main); 
    } 
   @Override 
   /**
    * 创建Activity之后要让它开始工作,onStart是让activity开始工作的方法,
    */
    protected void onStart() { 
	   super.onStart();
	   Log.d("tag","-----onStart");
    } 
   @Override
   /**
    * * 当activity处于onStop的时候,要想恢复activity进程也是调用此方法,因为处于onStop的activity的进程并没有结束,只是停止了而已并不需要重新创建
    * 但是处于onRestart状态的activity只是处于堆栈的顶部,处于可运行状态,还需要调用onStart
    */
   protected void onRestart() { 
	   super.onRestart();
	   Log.d("tag","-----onRestart");
   } 
   @Override 
   /**
    * 此方法是让处于onPause状态的activity恢复到运行状态
    */
   protected void onResume() { 
	   super.onResume();
	   Log.d("tag","-----onResume");
   } 
    @Override 
    /**
     * 当acticity被弹出的对话框或者透明的界面挡住的时候,activity将处于此状态(也就是说当activity失去焦点但是还是可见的时候处于此状态)
     * 并且此状态activity运行时所有的数据还保存着,调用onResume之后可以恢复到原来的状态
     */
    protected void onPause() {  
    	super.onPause();
    	Log.d("tag","-----onPause");
    } 
    @Override 
    /**
     * 当一个activity处于不可见状态的时候,用户不再与它交互,此时它就处于此状态。
     */
    protected void onStop() { 
    	super.onStop();
    	Log.d("tag","-----onStop");
    } 
    @Override 
    /**
     * 此状态不属于activity的生命周期,但是每个activity都必经这个状态
     * 当activity处于onStop状态时,并且不再被调用时,就会被销毁,此时就需要这个方法了
     */
    protected void onDestroy() { 
    	super.onDestroy();
    	Log.d("tag","-----onDestroy");
    } 
 }
经过验证,我发现,当手机暗屏是activity也是处于onPause状态的;另外,我之前不知道的一个情况:当手机横屏的时候,会结束掉原来的Activity并新建一个。

于是我在想,如果Activity正在于用户交互突然横屏了,数据会不会丢失呢?

于是我加上了一个文本编辑器,在上面写文字。


实际上横屏的时候Activity是销毁并重新建了一个,但是数据并没有丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值