Android开发随笔

Android活动一探究竟

2017-05-16  本文已影响10人  loser先生

作为Android的四大组件之一,活动最先走进我们的视野,其重要性不言而喻,今天就抽出时间来专门对Android活动一探究竟。

什么是活动

活动即Activity,是一种可以包含用户界面的组件,Android系统中所有我们能看到的内容都在活动里,它主要用于和用户进行交互。一个应用程序可以包含零个或多个活动,活动与活动之间可以通过Intent来相互联系,当一个应用程序中至少有一个活动时,那么就一定存在一个主活动,它就是我们刚打开应用程序时所进入到的那个界面,可以在AndroidManifest.xml中进行设置。

创建活动的步骤

隐藏标题栏

有时为了全屏显示活动或者显示开发者自定义的标题栏,需要在活动中不显示标题栏,这时需要如下代码
requestWindowFeature(Window.FEATURE_NO_TITLE)
这句代码一定要在setContentView()之前执行,不然会报错。

在活动中使用Toast

Toast译为吐司,是一种简单灵活的提醒方式,可以把一些短小的消息通知给用户,并在一段时间后消失,并且不会占据任何屏幕空间。
Toast.makeText(KUActivity.this,"在线功能稍后上线,敬请期待!", Toast.LENGTH_LONG).show();
其中,第一个参数Context,第二个参数要提示的内容,第三个参数为显示Toast的时间长短,其中LENGTH_LONG(长)和LENGTH_SHORT(短),记得别忘了调用show()方法来将Toast显示出来。

在活动中使用Menu

销毁活动

Intent启动活动

Intent是android程序中各个组件之间进行交互的重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。Intent一般分为显式Intent和隐式Intent。

Intent传递数据

活动的生命周期

在了解活动的生命周期之前,我们还需要再弄清楚两部分概念:返回栈和活动的状态。

后进先出.png

从上图可看出,当从Activity1中启动Activity2时,Activity1被推到栈底,Activity2变成栈顶,同理,Activity3进栈的过程和Activity2是一样的,如果我们按back按钮,则Activity3被弹出,Activity2则被推到栈顶,以此类推。当一直按back,返回到主页面,则所有的activity被全部弹出,则task不复存在。


Two tasks.png

其实,task有两种状态:Foreground前景和Background背景。当处于Background时,所有的activity都是停止的,当处于Foreground时,则其栈顶的Activity可与用户进行交互。因此Android是一个多任务的系统,不同任务是可以被互相切换的。

1)运行状态:当一个活动位于返回栈的栈顶时,活动处于运行状态

  1. 暂停状态:当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态,处于暂停状态的活动仍然是完全存活着的
  2.  停止状态:当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。
    
  3.  销毁状态:当一个活动从返回栈中移除后就变成了销毁状态
    
  1.  完整生存期:活动在onCreate()方法和onDestroy()方法之间所经历的,就是完整生存期
    
  1.  可见生存期:活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互
    
  2.  前台生存期:活动在onResume()方法和onPause()方法之间所经历的,就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行相互的
    
活动的生命周期.png

活动的启动模式

活动的启动模式一共有四种,分别是standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml中通过<activity>标签android:launchMode属性来选择启动模式。

standard.png singleTop.png singleTask.png singleInstance.png

List的一点小疑惑

我们在活动中会经常看到这句代码List list = new ArrayList()
List是一个接口,而ListArray是一个类,ListArray继承并实现了List。所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray则可以被构造。
那为什么不是List list = new ArrayList()
因为List有多个实现类,可能现在我们用的是ArrayList,也许哪一天就需要换成其它的实现类,如LinkedList或者Vector等等,因此生成List引用会更好一点。

知晓当前在哪个活动

新建一个BaseActivity extends AppCompatActivity,但不需要在AndroidManifest.xml中注册,让其成为所有活动的父类

  public class BaseActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
  Log.d("BaseActivity",getClass().getSimpleNmae());//获取当前实例的类名,并通过Log打印了出来
  }

随时随地退出程序

新建一个ActivityCollector类做为活动管理器,在其中通过一个List来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()方法用于将List中存储的活动全部都销毁掉,无论在哪个地方想退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。

活动的最佳启动方法

在一个团队完成一项工程时,为了方便队友启动我们编写的活动界面,可以在我们编写的活动中新添加一个actionStart()方法,这样队友通过该方法就知道启动该活动所需要的参数类型,从而很方便地在他的活动界面启动我们编写的活动。如需要在FirstActivity中启动SecondActivity,则代码如下

上一篇 下一篇

猜你喜欢

热点阅读