您当前的位置:首页 > 互联网教程

什么是Activity,详细介绍Activity

发布时间:2025-05-23 01:41:06    发布人:远客网络

什么是Activity,详细介绍Activity

一、什么是Activity,详细介绍Activity

1、首先,Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。

2、在深入了解Activity之前,我们先要知道一下MVC设计模式,在JAVAEE中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我就先来介绍一下MVC在Android开发中的应用:

3、M(Model模型):Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层与JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同一个包中,可以分开放,但它们统称为Model层)。

4、V(View视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一可以看到的一层,接收用户输入,显示处理结果;在Android应用中一般采用XML文件里德界面的描述,使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。

5、C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,尽量能过activity交割Model业务逻辑层处理。

6、好了,在介绍过Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。

7、介绍过Activity的主要作用后,那么我们就要详细说一下Activity了。

8、Activity的生命周期是被以下的函数控制的。

9、public class Activity extends ApplicationContext{

10、protected void onCreate(Bundle icicle);

11、protected void onFreeze(Bundle outIcicle);

12、onCreate(Bundle)函数是你进行初始化的地方,这个也是执行

13、setContentView(View)函数的地方,setContentView(View)函数可以传入一个由XML

14、编制的UI界面,可以使UI和具体实现完全分离。

15、onPause()函数是处理用户离开当前 Activity的地方。更重要的是,任何在当前

16、Activity中的任何改变都要在这个函数中提交。

17、活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就

18、运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外一个Activity

19、处于文档处于焦点状态,当前的Activity就处于pause。

20、停止,当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在

21、结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这

22、是Activity就是处于结束状态了。

23、处于结束状态的是Activity,如果要使用户可见,只要重启才可以。

24、当前Activity所在的线程为主线程,它的响应时间为5秒,如果在当前运行的Activity中进行耗时的操作且响应时间起过5秒,那么程序就会报ANR错误。所以,这也是不建议在Activity中写太多复杂代码的原因之一。

25、当然,有些代码只能写在Activity中,不然就运行不了(它们不是生命周期方法),比如你想要获得android系统或者硬件一的些信息,就必须在Activity中写出来,如果单独写一个工具类获得不了。

二、Android 中如何在java类中调用activity 中的一个方法

1、通常,您不应该以这种方式创建新的 MainActivity实例。要打开一个新的 MainActivity,请使用 Intent。在您的情况下,您应该引用原始 MainActivity实例,并在那里调用此方法。不要以任何方式创建新的,因为您已经在运行它。

2、MainActivity.this.myMethod("Hello there")

3、您不必存储mContext.你已经在 MainActivity里面了。

4、public class MainActivity extends AppCompatActivity{

5、protected void onCreate(Bundle savedInstanceState){

6、 super.onCreate(savedInstanceState);

7、 setContentView(R.layout.activity_main);

8、 WebView myWebView= findViewById(R.id.webview);

9、 myWebView.loadUrl("");

10、 myWebView.addJavascriptInterface(new WebAppInterface(),"Android");

11、public void myMethod(String test){

12、 Toast.makeText(this, test, Toast.LENGTH_SHORT).show();

13、/** Show a toast from the web page*/

14、 public void showToast(String toast){

15、 MainActivity.this.myMethod("Hello there");

16、实际上,我认为您甚至可以避免使用MainActivity.this.,并myMethod直接调用。

三、android activity的关闭处理的几种方式

项目中我们往往要用到关闭程序时销毁所有的activity,而且这也是面试经常遇到的问题,退出程序的方式也有好几种,一下是一些处理关闭程序的方法:

1.最简单的方式就是使用系统的方法exit(0),这是最简单粗暴的方式,强制程序退出,但是这种方法针对部分机型有可能不太好使,退出时有可能出现程序崩溃的弹出框,或者程序会重新启动,这对用户体验来说不是很好。

2.抛出异常强制退出,这种方法的使用对用户体验来说简直就是灾难,所以就不要用这种方式了。

3.使用广播的方式通知activity进行关闭,这种方式也有人在用,大家可以自行百度下,我主要介绍下面这种方式。

4.使用application,在application中创建activity集合,创建添加以及删除activity的方法,并且在BaseActivity中的生命周期中调用这些方法,在使用的时候调用BaseApplication的方法,这也是目前最常用的方法,但是这种在BaseActivity中添加activity的方法也有一个问题,那就是当你要使用第三方的BaseActivity的时候,一个还好你可以继承,那如果要使用两个第三方的BaseActivity呢, Java本身是单继承的,所以就会导致activity关闭不全了。那么这个问题的解决就要依靠一接口: ActivityLifecycleCallbacks;这是Application中声明的一个接口,其内容如下:

public voidonActivityCreated(Activity activity,Bundle bundle){

Log.e("onActivityCreated---","is running"+"--"+activity.getLocalClassName());

public voidonActivityStarted(Activity activity){

Log.e("onActivityStarted---","is running"+"--"+activity.getClass().getCanonicalName());}

public voidonActivityResumed(Activity activity){ Log.e("onActivityResumed---","is running"+"--"+activity.getClass().getCanonicalName());}

public voidonActivityPaused(Activity activity){ Log.e("onActivityPaused---","is running"+"--"+activity.getClass().getCanonicalName());}

public voidonActivityStopped(Activity activity){ Log.e("onActivityStopped---","is running"+"--"+activity.getClass().getCanonicalName());}

public voidonActivitySaveInstanceState(Activity activity,Bundle bundle){ Log.e("onActivitySaveInstanceState---","is running"+"--"+activity.getPackageName());}

public voidonActivityDestroyed(Activity activity){ Log.e("onActivityDestroyed---","is running"+"--"+activity.getPackageName());}

大家可以看到这些方法名采用的都是英语中的过去式命名,其意大家看方法名也应该懂了,就是activity执行过得生命周期都会在这里调用,想要这些方法执行要调用

registerActivityLifecycleCallbacks(this);

这个方法,记得一定要调用啊,还有请记住这些回调是针对所有的Activity哦,所以我们就可以使用这样的方式去对activity进行关闭或者其他操作了。下面有一种存放activity的方式,喜欢的可以使用:

private staticWeakReferencecurAct;

private staticWeakHashMapacList=newWeakHashMap<>();

public static voidsetCurActivity(Activity act){curAct=newWeakReference<>(act);acList.put(act, null);}

/***获取想要的activity*@return*/

public staticActivitygetCurActivity(){if(acList==null||acList.isEmpty())return null;WeakReference wr=curAct;if(wr!=null){returnwr.get();}return null;}

public static voidclearCurActivity(Activity act){ Object remove=acList.remove(act);if(remove!=null&& TextUtils.equals(remove.getClass().getSimpleName(),curAct.get().getClass().getSimpleName())){//TODO You want to do something.}}/***销毁所有的activity*/public static voiddestroyAllActivity(){if(null!=acList&&!acList.isEmpty()){ Object[] keys=acList.keySet().toArray();for(Object obj: keys){ Activity act=(Activity)obj;if(act!=null){ act.finish();}}}}

/***关闭某个activity*@paramactivity*/

public static voidcloseActivity(String activity){if(null!=acList&&!acList.isEmpty()){ Object[] keys=acList.keySet().toArray();for(Object obj: keys){if(obj!=null&& activity!=null&& TextUtils.equals(obj.getClass().getSimpleName(),activity)){ Activity act=(Activity)obj;act.finish();}}}}