精华内容
下载资源
问答
  • activity中有关intent的三种用法,最简单实用。
  • Activity作为安卓四大组件之一,平常我们接触得最多得也是activity,所以很有必要详细了解一下他的详细生命周期。这篇文章定位是有一点安卓基础的,所以还完全不了解的可以先去学习一下activity。这篇文章主要是讲...

    前言

    Activity作为安卓四大组件之一,平常我们接触得最多得也是activity,所以很有必要详细了解一下他的详细生命周期。这篇文章定位是有一点安卓基础的,所以还完全不了解的可以先去学习一下activity。这篇文章主要是讲活动的生命周期。
    活动的生命周期,人有胎儿期,青春期,老年期一样,活动同样有他的各种生命状态。我们出生会哭,进入成年期会有成人礼。活动也一样,每进入一个状态都会回调相应的方法。对于我们来说,活动周期就是活动会在活动具体哪个时候会回调哪一些方法,然后我们可以重写这一些方法,来实现我们的功能。所以我们得具体了解究竟什么时候调用什么方法。例如在onCreate方法中初始化,在destroy中释放内存等等。
    那接下来就看看他的具体生命周期。

    活动的状态

    首先得了解一下活动的状态。我个人的理解把活动分为四个状态:后台状态,暂停状态,运行状态和销毁状态。

    1. 停止状态:这个状态表示活动未进入前台,我们看不到也无法交汇。切换界面活动都会在后台。如果内存紧张的话有可能被回收。就像我们有时候打游戏切换到微信回了一下信息,回来的时候卧槽怎么把我游戏退了,就是这样。
    2. 运行状态:这个不用多讲,当你在交汇的这个活动就是运行状态。
    3. 暂停状态:当弹出一个提示框,我们回发现无法与原来的界面交汇了,就是只能点那个提示框。当一个活动位于栈顶,也就是你看的见他,但是你没办法操作他,这个时候就是属于暂停状态。
    4. 销毁状态:就是被移出栈顶的活动,马上就会被回收了。例如你退出一个应用他马上就会被杀了。

    常规情况下的生命周期

    典型情况下的生命周期

    每个活动正常启动的话都会经历的生命周期如下图

    活动启动
    onCreate
    onStart
    onResume
    Activity运行
    onPause
    onStop
    onDestroy
    活动销毁
    onRestart

    每到一个时间点都会调用相关的方法,接下来一个一个来分析一下这些方法。

    1. onCreate:
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    

    这是我们每个活动都会用到的一个方法。他在活动被创建的时候被调用,且只会调用一次。除非被destroy重新创 建。我们一般在这个方法中做一下初始化的事情。例如加载布局资源等等。细心的读者可能会注意到他有一个Bundle参数,这个参数主要是用于保存被异常销毁事的数据的,这个在后面会讲到

    1. onStart:顾名思义这个方法表示活动正在启动,这个时候活动界面已经看的见了,但是还不能与用户交汇,简单点说就是你看得到点不了。但是一般速度很快不会让你感受到这个现象,不然就会好像卡死一样了。所以不能在这个方法中做重量级的操作,初始化什么的都放在onCreate。

    2. onResume:这个方法表示活动显示在前台了而且也可以用了。onStart和onResume主要配合onPause和onStop方法来使用,下面会讲到。

    3. onPause:活动被暂停的时候会调用到。例如一些弹出提示框,看得到界面但是无法进行交汇。一般执行完这个方法后紧接着就会执行onStop方法了。这个方法可以做一些动画的暂停工作等等轻量级的工作,不然弹个提示框都要卡一下用户体验也很差对吧。
      如果没有进入onStop这个环节的话,回到原Activity的话,那么就会调用onResume这个方法了

    4. onStop:这个方法在活动即将停止的时候调用,同样不能做重量级的工作。一般切换界面,如果内存足够没有被杀死的话,这个活动就会进入停止状态。

    5. onRestart:当活动从停止状态回来的时候就会调用这个方法。状态和onStart其实是差不多的,只是为了区分是正常打开的还是从停止状态回来的,可以分别写不同的方法。

    6. onDestroy:活动被销毁的时候会调用这个方法。可以做一些资源的释放什么的。但这里要特别强调的一点就是并不是所有情况下活动被销毁都会调用这个方法。例如当你按下返回键回到上个界面,这个当然是会执行这个方法。但是如果你切换到了别的应用或者回到了桌面,这个应用被后台杀死了,那么只有处于栈顶也就是这个应用最后打开的活动会执行destroy方法,其他都不会,需要特别注意一下。
      在这里插入图片描述

    一些例外情况的生命周期

    有一句话叫做用户永远不会按照你的设想去使用软件,活动也一样,总是会出现一些比较不一样的情况。这些情况活动是怎么跑的也来看看:

    1. 返回桌面的时候:返回桌面其实就像切换到别的活动是一样的道理,这个时候执行的方法是:onPause --> onStop。
    2. 当活动被系统回收再被打开,流程和打开一个新的活动是一样的。
    3. 打开新的活动时先执行onPause方法再启动新的活动,onStop会慢一点点执行。

    异常情况下的生命周期

    这里的异常情况主要有两种:一种是放在后台被杀死了,不是我们主动去终结他的生命的,第二种是设备的配置发生了改变,例如屏幕翻转。对于这两种情况我们具体来看一下

    情况1 :资源相关的系统配置发生改变

    这个资源相关的系统配置怎么说呢。我们的项目目录下不是有drawable-hdpi ,drawable-mdpi,这一类的文件夹,在不同的屏幕尺寸下会获取不同的图片,就像我们手机和平板也是一样有两个不同的配置。平常中我们翻转屏幕时,屏幕尺寸就发生了变化,准确来说时屏幕的长宽比例发生了变化,那么这个时候Activity就会被重建(当然你也可以设置他不重建)。
    细心的读者会发现,即使我的屏幕翻转了,活动重建了,可是还是保留着刚刚我操作的内容啊!例如我在输入框输入了Hello World翻转后还是Hello World,不是说活动被重建了吗,为什么这些还存在?
    不知道还记不记得onCreate方法中有一个Bundle参数吗?没错,这个参数就是记录之前的数据的。重建的过程和平常的杀死启动活动有一些不一样,看一下:

    屏幕翻转
    重新创建
    Activity运行
    onPause,onSaveInstanceState
    onStop
    onDestroy
    onCreate
    onRestoreInstanceState
    onStart,onResume
    Activity重新启动

    可以看到最主要的不同就是多了onSaveInstanceState和onRestoreInstanceState这两个方法。
    活动在这种异常的情况下被终结生命后,就会调用onSaveInstanceState方法来保存目前的数据,这个方法在onStop方法前调用,但是和onPause方法的前后关系没有必然的关系。然后作为一个Bundle参数传递给重新创建的活动。这个Bundle对象会在onCreate方法中和onRestoreInstanceState中被使用。onRestoreInstanceState这个方法主要就是把刚才的数据还原,执行的次序是在onStart之后。
    要注意的一点是,onSaveInstanceState方法只有在活动还会被重建的时候才会被调用。例如你手动把他后台杀了,是不会调用这个方法的。

    情况2:资源内存不足导致活动被杀死

    当系统内存不足的时候,系统就会按照优先级的大小去杀死一些活动,并在后续通过上面onSaveInstanceState和onRestoreInstanceState方法来恢复数据。优先级按照状态依次是:运行状态,暂停状态,停止状态。一般最有可能是停止状态的活动被杀了。所以一些后台工作就尽量放在service中防止被杀死

    总结

    讲了这么多的生命周期,其实我也是简单讲了我们在使用中一般会遇到的生命周期。有一些读者可能会有这个疑问:为什么我主动调用了onDestroy方法但是活动却没有被杀死?举个例子,你给一个婴儿举办成人礼,他会马上成人吗?要注意的一点就是,我们所说的这些生命周期的回调方法,本质上他们都是一样的,只是被调用的时间不用。他们只是在活动的不同时间被调用,并不是调用这个方法去推进活动的生命进行。主动销毁活动我们用到的是finish(),而不是onDestroy,要特别注意。

    生命周期是活动很重要的一部分,只要了解了他的生命周期我们才可以在准确的时间给他做一些正确的事情。例如你的孩子进入了青春期,你就得跟他说好好学习不要老是想着谈恋爱对吧。我之前自己出过一个低级错误就是在onCreate方法之前使用findViewById,活动都还没创建,怎么找得到布局呢。充分了解这些生命周期后就不会犯这些低级错误了。

    我也是一个安卓新手,有哪些地方写的不好还请大佬们指教

    ·
    ·
    ·

    参考资料

    《Android开发艺术探索》–任玉刚
    《第一行代码》–郭霖

    展开全文
  • [java] view plain copy  package com.scott.lifecycle;    import android.app.Activity;  import android.content.Context;  import android.content.Intent;  import androi
    [java] view plain copy
    

        package com.scott.lifecycle;  
          
        import android.app.Activity;  
        import android.content.Context;  
        import android.content.Intent;  
        import android.os.Bundle;  
        import android.util.Log;  
        import android.view.View;  
        import android.widget.Button;  
          
        public class LifeCycleActivity extends Activity {  
              
            private static final String TAG = "LifeCycleActivity";  
            private Context context = this;  
            private int param = 1;  
              
            //Activity创建时被调用  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                Log.i(TAG, "onCreate called.");  
                  
                setContentView(R.layout.lifecycle);  
                  
                Button btn = (Button) findViewById(R.id.btn);  
                btn.setOnClickListener(new View.OnClickListener() {  
                    @Override  
                    public void onClick(View v) {  
                        Intent intent = new Intent(context, TargetActivity.class);  
                        startActivity(intent);  
                    }  
                });  
            }  
              
            //Activity创建或者从后台重新回到前台时被调用  
            @Override  
            protected void onStart() {  
                super.onStart();  
                Log.i(TAG, "onStart called.");  
            }  
              
            //Activity从后台重新回到前台时被调用  
            @Override  
            protected void onRestart() {  
                super.onRestart();  
                Log.i(TAG, "onRestart called.");  
            }  
              
            //Activity创建或者从被覆盖、后台重新回到前台时被调用  
            @Override  
            protected void onResume() {  
                super.onResume();  
                Log.i(TAG, "onResume called.");  
            }  
              
            //Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后  
            /*@Override
            public void onWindowFocusChanged(boolean hasFocus) {
                super.onWindowFocusChanged(hasFocus);
                Log.i(TAG, "onWindowFocusChanged called.");
            }*/  
              
            //Activity被覆盖到下面或者锁屏时被调用  
            @Override  
            protected void onPause() {  
                super.onPause();  
                Log.i(TAG, "onPause called.");  
                //有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据  
            }  
              
            //退出当前Activity或者跳转到新Activity时被调用  
            @Override  
            protected void onStop() {  
                super.onStop();  
                Log.i(TAG, "onStop called.");     
            }  
              
            //退出当前Activity时被调用,调用之后Activity就结束了  
            @Override  
            protected void onDestroy() {  
                super.onDestroy();  
                Log.i(TAG, "onDestory called.");  
            }  
              
            /**
             * Activity被系统杀死时被调用.
             * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
             * 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态.
             * 在onPause之前被调用.
             */  
            @Override  
            protected void onSaveInstanceState(Bundle outState) {  
                outState.putInt("param", param);  
                Log.i(TAG, "onSaveInstanceState called. put param: " + param);  
                super.onSaveInstanceState(outState);  
            }  
              
            /**
             * Activity被系统杀死后再重建时被调用.
             * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
             * 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
             */  
            @Override  
            protected void onRestoreInstanceState(Bundle savedInstanceState) {  
                param = savedInstanceState.getInt("param");  
                Log.i(TAG, "onRestoreInstanceState called. get param: " + param);  
                super.onRestoreInstanceState(savedInstanceState);  
            }  
        }
    展开全文
  • activity与另一个activity的fragment之间相互传值 谁能详细说明一下吗 最后给一个例子 谢谢大家
  • Android的Activity的设计与Web页面非常类似,从页面的跳转通过连接,以及从页面的定位通过URL,从每个页面的独立封装等方面都可以看出来,它主要负责与用户进行交互。 Service则是在后台运行,默默地为用户提供功能...
  • 首先你要知道Activity的四种状态: Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户...Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖

    转自:http://www.cnblogs.com/ifaithu/articles/2762025.html

    首先你要知道Activity的四种状态:
    Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。 
    Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。 
    Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped 状态。 
    Killed Activity 被系统杀死回收或者没有被启动时处于 Killed 状态。
    
    protected void onStart() 该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用,一般执行了onStart()后就执行onResume()。 
    protected void onResume() 在 Activity 从 Pause 状态转换到 Active 状态时被调用。

    onResume是activity获得用户焦点,在与用户交互
    onStart是activity用户可见,包括有一个activity在他上面,但没有将它完全覆盖,用户可以看到部分activity但不能与它交互

    展开全文
  • 本篇文章介绍了android弹出activity设置大小的方法,需要的朋友可以参考一下
  • 本篇文章主要介绍了Android中Service与Activity之间通信的几种方式,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,具有一定的参考价值,有兴趣的可以了解一下。
  • ActivityB返回ActivityA: ActivityB onPause ==> ActivityA onRestart ==> ActivityA onStart ==> ActivityA onResume ==> ActivityB onStop ==> ActivityB onDestroy 常见的就这几种方式了,横屏的暂时没有...

    生命周期

    周期即活动从开始到结束所经历的各种状态。生命周期即活动从开始到结束所经历的各个状态。从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。

    Acitivity的四种状态

    1. 运行:如果一个活动被移到了前台(活动栈顶部)。
    2. 暂停:如果一个活动被另一个非全屏的活动所覆盖(比如一个Dialog),那么该活动就失去了焦点,它将会暂停(但它仍然保留所有的状态和成员信息,并且仍然是依附在WindowsManager上),在系统内存积极缺乏的时候会将它杀死。
    3. 停止:如果一个活动被另一个全屏活动完全覆盖,那么该活动处于停止状态(状态和成员信息会保留,但是Activity已经不再依附于WindowManager了)。同时,在系统缺乏资源的时候会将它杀死(它会比暂停状态的活动先杀死)。
    4. 重启:如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。

    生命周期状态说明

    [外链图片转存失败(img-UJa6pN0J-1566355142573)(https://i.imgur.com/jVAai5p.png)]

    生命周期方法

    1. onCreate:表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中可以做一些初始化的工作(加载布局资源、初始化Activity所需要的数据等),耗时的工作在异步线程上完成。

    2. onRestart:表示Activity正在重新启动。一般情况下,在当前Activity从不可见重新变为可见的状态时onRestart就会被调用。这种情形一般是由于用户的行为所导致的,比如用户按下Home键切换到桌面或者打开了一个新的Activity(这时当前Activity会暂停,也就是onPause和onStop被执行),接着用户有回到了这个Activity,就会出现这种情况。

    3. onStart:表示Activity正在被启动,并且即将开始。但是这个时候要注意它与onResume的区别。两者都表示Activity可见,但是onStart时Activity还正在加载其他内容,正在向我们展示,用户还无法看到,即无法交互。

    4. onResume:表示Activity已经创建完成,并且可以开始活动了,这个时候用户已经可以看到界面了,并且即将与用户交互(完成该周期之后便可以响应用户的交互事件了)。

    5. onPause:表示Activity正在暂停,正常情况下,onStop接着就会被调用。一般来说,在这个生命周期状态下,可以做一些存储数据、停止动画的工作,但是不能太耗时,如果是由于启动新的Activity而唤醒的该状态,那会影响到新Activity的显示,原因是onPause必须执行完,新的Activity的onResume才会执行。

    6. onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作,同样也不能太耗时(可以比onPause稍微好一点)。

    7. onDestroy:表示Activity即将被销毁,这是Activity生命周期的最后一个回调,我们可以做一些回收工作和最终的资源释放(如Service、BroadReceiver、Map等)。

    • 一个正常的Activity生命周期执行方法:(创建)onCreate ==> onStart ==> onResume ==>(销毁)onPause ==> onStop ==> onDestroy
    • 关电源: onPause ==> onStop
    • 重新开电源键:onRestart ==> onStart ==> onResume
    • 点击home键:onPause ==> onStop
    • 点击返回键:onPause ==> onStop ==> onDestroy
    • ActivityA跳转到ActivityB:ActivityA onPause ==> ActivityB onCreate ==> ActivityB onStart ==> ActivityB onResume ==> ActivityA onStop
    • ActivityB返回ActivityA: ActivityB onPause ==> ActivityA onRestart ==> ActivityA onStart ==> ActivityA onResume ==> ActivityB onStop ==> ActivityB onDestroy

    常见的就这几种方式了,横屏的暂时没有使用过没有研究,当然也不排除一些异常情况。参考https://blog.csdn.net/woshimalingyi/article/details/50961380,上面文字说明基本copy,主要用于复习。

    展开全文
  • Activity设置成半透明的对话框 将Activity设置成半透明的对话框 在定义Activity时指定Theme.Dialog主题就可以将Activity设置成对话框风格.通过修饰Theme.Dialog主题的android:wind ... Activity使用Dialog样式...
  • Android将Activity打包成jar包供第三方调用,代码的核心是MResource这个类,利用反射根据资源名字获取资源ID
  • activity和fragment的区别

    2021-06-05 09:08:46
    DIEA1.fragment显得更加灵活。可以直接在XML文件中添加,Activity则不能。...3.fragment和Activity之间的通信:(也就是控件的相互操控)fragment控制fragment:得到一个Activity,然后通过这个Activity的getFragme...
  • 64) 04-23 20:10:00.067: E/AndroidRuntime(2883): at android.app.Activity.dispatchActivityResult(Activity.java:5532) 04-23 20:10:00.067: E/AndroidRuntime(2883): at android.app.ActivityThread....
  • 安卓Activity的作用

    千次阅读 2017-03-29 21:27:17
    Activity是安卓应用程序的四大组件之一,负责管理安卓应用的用户界面。一个程序可以包含若干Activity,每个Acticity负责展示一个用户界面。也就是说在Android中每个界面都是一个Activity,切换界面操作其实是多个...
  • http://blog.csdn.net/RichieZhu/article/details/51015092
  • Activity作为四大组件之一,其在Android中的重要性不言而喻。但是对于Activity,我们天天用但是你真的完全掌握它了吗?其实讲到Activity,里面的细节点非常多。所以,废话不多说,让我们从它的生命周期开始来揭开它...
  • Android——Activity的四种启动模式

    千次阅读 2021-02-23 10:55:50
    我们一个程序会存在不同的Activity,也会存在许多实例,这些实例就会进入任务栈中,任务栈采用“后进先出”的算法,例如:我们使用手机,打开QQ,在QQ界面进入一个聊天界面,此时存在两个Activity实例,假设我们按...
  • 前言:最开始学这个的时候,我还在想为什么要学生命周期,为...二:Activity生命周期状态 图片来源与来自这里 就通过一张图可能不容易理解吧,那举个栗子吧 栗子:新建一个安卓项目,在后端添加以下代码(添加日志打印,...
  • Back StackActivity生命周期回调方法代码下Activity生命周期展示Activity的内部调用过程Activity的四种状态Activity生命周期的嵌套循环Activity生命周期交互设计思想1.多个Activity的生命周期交互2.为什么要先暂停...
  • 刚开始学习Android,被Activity搞的晕头转向,看了很多资料,才大概搞清楚。因为那些高手写的都是术语和英文,想看懂文章就像要去威虎山剿匪一样,必须懂那些黑话,要不然基本有去无回。 Activity(活动)其实是...
  • Android的Service也运行在主线程,但是在服务里面是没法直接调用更改UI,如果需要服务传递消息给Activity,通过广播是其中的一种方法:一、在服务里面发送广播通过intent传送数据、通过setAction 设置Activity接收...
  • android activity生命周期示例代码。里面包含activity执行finish之后的生命周期,旋转的生命周期。切换以及返回activity的生命周期。我的博客地址:http://blog.csdn.net/qq_16064871
  • Android的activity理解

    2018-03-05 10:34:04
    activity可以理解为软件应用的界面,一个activity就是一个界面,activity是有生命周期的,首先启动一个activity的时候,会依次执行onCreate()、onStart()和onResume()函数;结束一个activity,依次会执行...
  • 《Android》Activity生命周期详解

    千次阅读 2020-03-10 20:17:57
    1、什么是Activity的生命周期? 用户在使用一个应用程序时,随着应用的启动、页面的跳转、进入后台等一些操作的发生,Activity会回调一些固定的方法,这些回调方法标识了Activity的状态改变,比如创建、销毁、暂停、...
  • 在实际开发过程中,有时需要在Activity之间传递数据,可以分成两种情况,第一种是向下一个被启动的Activity发送数据,第二种是向上一个活动返回数据。如图所示。 一、向下一个被启动的Activity发送数据 可以通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,613
精华内容 645
关键字:

安卓中activity