android开发分享四大组件—Activity

前言就业前的学习补足吧,遥想半年前的后端职业梦,半年后却确定了客户端开发的offer,人生无常呀,记录下自己学习补足Android开发的过程,大家一起加油呀。不是基础贴,所以很多简单的实践方面的东西都不会列出哦。Activity定义一种可以包含用户界面的组件,主要用于和用户进行交互。通俗的来说,就是APP中我们看见的部分,直接操作的部分都是包含在Activity中的。Activity的生命周期返回栈Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的


前言

就业前的学习补足吧,遥想半年前的后端职业梦,半年后却确定了客户端开发的offer,人生无常呀,记录下自己学习补足Android开发的过程,大家一起加油呀。

不是基础贴,所以很多简单的实践方面的东西都不会列出哦。

Activity

定义

一种可以包含用户界面的组件,主要用于和用户进行交互。通俗的来说,就是APP中我们看见的部分,直接操作的部分都是包含在Activity中的。

Activity的生命周期

返回栈

Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被称作返回栈(back stack)。

四大组件---Activity

栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,前一个入栈的Activity就会重新处于栈顶的位置。

系统总是会显示处于栈顶的Activity给用户。

生命周期

  • onCreate() 这个方法在Activity第一次被创建的时候调用。

  • onStart() 这个方法在Activity由不可见变为可见的时候调用。

  • onResume() 这个方法在Activity准备好和用户进行交互的时候调用。

  • onPause() 这个方法在系统准备去启动或者恢复另一个Activity的时候调用。

  • onStop() 这个方法在Activity完全不可见的时候调用。

  • onDestroy() 这个方法在Activity被销毁之前调用。

  • onRestart() 这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。

四大组件---Activity

四大组件---Activity

常见的生命周期调用场景

四大组件---Activity

Activity被回收了怎么办

当一个Activity进入暂停状态时,是有机会被系统进行回收的,例如:

有一个Activity A,用户在Activity的基础上打开了Activity B,此时系统内存不足,对ActivityA进行了回收,此时我们按back键回到Activity A时会出现什么情况呢?

Activity A还是会正常显示,因为此时Activity又被重新创建了一次,执行了onCreate()方法而不是执行onRestart(),很好理解吧,因为它没有了,所以是重新创建,但是问题就出来了,我们的Activity A很可能保存了我们的操作数据,在重新进行创建的时候这些信息丢失了,我们应该怎么做呢?

答案是我们对Activity的onSaveInstanceState()回调方法进行重写,这个方法可以保证在Activity被回收前进行调用。

onSaveInstanceState()方法携带了一个Bundle类型的参数,Bundle提供了一系列方法用于存储数据。

  @Override protected void onSaveInstanceState(@NonNull Bundle outState) {         super.onSaveInstanceState(outState);         String x = "数据";         outState.putString("x",x);     } 

我们对数据进行了保存,就一定有取出的过程,所以我们需要在onCreate()方法中进行取出,我们看onCreate()方法中参数Bundle savedInstanceState,我们可以从中取出。

 if (savedInstanceState != null){             String data = savedInstanceState.getString("x");          } 

Activity的启动模式

通过android:launchMode="?"进行设置。

标准模式standard

standard是Activity默认的启动模式,在不进行显式指定的情况下,所有Activity都会自动使用这种启动模式。

在standard模式下,每当启动一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。

对于使用standard模式的Activity,系统不会在乎这个Activity是否已经在返回栈中存在,每次启动都会创建一个该Activity的新实例。

四大组件---Activity

栈顶复用模式

当Activity的启动模式指定为singleTop,在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例。
四大组件---Activity

栈内复用模式singleTask

当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并把在这个Activity之上的所有其他Activity统统出栈,如果没有发现就会创建一个新的Activity实例。

四大组件---Activity

单例模式singleInstance

当Activity的启动模式指定为singleInstance,会启用一个新的返回栈来管理这个Activity。

假设我们的程序中有一个Activity是允许其他程序调用的,如果想实现其他程序和我们的程序可以共享这个Activity的实例,就可以使用singleInstance模式。

在这种模式下,会有一个单独的返回栈来管理这个Activity,不管是哪个应用程序来访问这个Activity,都共用的同一个返回栈,也就解决了共享Activity实例的问题。
四大组件---Activity

四种启动模式的区别

四大组件---Activity

Activity间的交互

显式 Intent

 Intent intent = new Intent(this,MainActivity.class);  startActivity(intent); 

隐式Intent

 <activity android:name=".MainActivity"         android:launchMode="standard">       <intent-filter>         <action android:name="com.example.activity.start"/>         <category android:name="android.intent.category.DEFAULT"/>       </intent-filter>     </activity> 
Intent intent = new Intent("com.example.activity.start"); startActivity(intent); 

隐式Intent的应用还有很多,包括匹配规则也没有总结出来,大家有兴趣的可以单独去查找。

向下一个Activity传递数据和接受返回数据

可以通过Intent存储信息,返回信息时可以采用以下方法:
采用onStartActivityForResult()启动新的Activity;然后在新的Activity中定义:

Intent intent = new Intent(); intent.putExtra("return","hello") setResult(RESULT_OK,intent); 

通过重写接受返回数据的Activity中的onActivityResult()方法:

/**      * Dispatch incoming result to the correct fragment.      */     @Override protected void onActivityResult(int requestCode, int resultCode,         @Nullable Intent data) {         super.onActivityResult(requestCode, resultCode, data);     } 

就可以接收信息了。

总结

第一次系统的开始写博客,有很多细节都没有注意呀,希望自己可以越来越清晰吧,加油!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/892426.html

(0)
上一篇 2021年10月20日
下一篇 2021年10月20日

精彩推荐