Preference中如何增加activity生命周期监听

本文主要来介绍Preference如何根据Activit的生命周期做出一些逻辑。

1、Preference是android中的一个基本控件,在Preference下面派生出了SwitchPreference,CheckBoxPreference、ListPreference等众多的控件。这些控件作为一个结构体,被ListView加载,并按照Preference中自定义的布局结构inflate出来各种布局。

例如:Preference:

protected View onCreateView(ViewGroup parent) {
        final LayoutInflater layoutInflater =
            (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        final View layout = layoutInflater.inflate(mLayoutResId, parent, false); 

        final ViewGroup widgetFrame = (ViewGroup) layout
                .findViewById(com.android.internal.R.id.widget_frame);
        if (widgetFrame != null) {
            if (mWidgetLayoutResId != 0) {
                layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
            } else {
//                widgetFrame.setVisibility(View.GONE);
            }
        }
        return layout;
    }

其他的派生控件,mLayoutResId并无不同,但是字控件多了一些别的控件,例如:SwitchPreference多了一个Switch开关,CheckBoxPreference控件多了一个CheckBox控件。这写多出来的控件,是由mWidgetLayoutResId来控制的。也就是说,mLayoutResId在Preference以及其自控件中并无不同,不同的地方是不同的控件的mWidgetLayoutResId不同。

对于PreferenceActivity:

我们一般在PreferenceActivity的addPreferencesFromResource()方法中进行Preference的实例化。故而addPreferencesFromResource的执行时机等同于onCreateView
的执行时机。

对于PreferenceFragment:

我们会在其onActivityCreate方法后执行bingPreference,也就是说bindPreference等同于onCreateView方法的执行。

我们一般在onCreate、onStart或者onResume中进行addPreferenceFromResource方法,

故而:我们可以这样认为,onCreate、onStart、onResume后我们会调用Preference的构造函数、onCeateView、onBindView方法。

2、当Activity执行到onStop或者onDestory方法时,我们应如何应对?

Preference可以实现PreferenceManager.OnActivityStopListener接口,并且在Preference内部执行如何注册:

getPreferenceManager().registerOnActivityStopListener(this);

那么含有Preference的页面在执行到onStop时,Preference就会回调执行onActivityStop方法,onDestory同理。

其逻辑支持如下:

PreferenceActivity:

@Override
    protected void onStop() {
        super.onStop();

        if (mPreferenceManager != null) {
            mPreferenceManager.dispatchActivityStop();
        }
    }

PreferenceFragment:

@Override
    public void onStop() {
        super.onStop();
        mPreferenceManager.dispatchActivityStop();
        mPreferenceManager.setOnPreferenceTreeClickListener(null);
    }

他们都会调用PreferenceManager的

dispatchActivityStop();

方法:

void dispatchActivityStop() {
        List<OnActivityStopListener> list;

        synchronized (this) {
            if (mActivityStopListeners == null) return;
            list = new ArrayList<OnActivityStopListener>(mActivityStopListeners);
        }

        final int N = list.size();
        for (int i = 0; i < N; i++) {
            list.get(i).onActivityStop();
        }
    }

onDestory方法同理。

时间: 2024-10-13 19:02:20

Preference中如何增加activity生命周期监听的相关文章

【Android】利用Activity生命周期监听应用前后台切换

~转载请注明:http://blog.csdn.net/u013015161/article/details/46762991 实现介绍 在Android应用开发中,我们有时候需要监听到应用前后台的切换.这里提供一种思路,该思路并非原创,而是一种比较通用的办法,这里做一下介绍,附带实际过程中遇到的问题的解决. 具体实现思路是通过重写Activity的onResume方法和onStop方法实现,即在onStop里判断应用是否切换到后台,在onResume里判断是否切换到前台. 先回顾一下Activ

Android Activity生命周期都该做哪些事情?

Android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码.系统存在启动与销毁一个activity的一套有序的回调函数.本节来讨论下不同生命周期的回调函数里都该做哪些事情,不该做哪些事情. 理解生命周期的回调 在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数.Activity生命周期的每一个阶段就像金字塔中的台阶.当系统创建了一个新的activity实例,每一个回调函数会向上一阶移动activity状态.处在金字塔顶端意味着当前activity处

android面试总结01 activity生命周期

面试经常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期如下: onCreat onStart onResume onPause onStop onDestory 外加一个 onRestart 就像图示一样,当一个activity第一次启动时会调用的函数分别是 onCreat onStart onResume方法 此时activty会正常运行 . 当出现如图所示,屏幕弹出一个dialog遮住activity,但这是activity还显示一部分时, 会调用onPa

activity生命周期中方法解析

对于activity的生命周期我觉得是一个简单而又不简单的问题,很多人可能觉得自己已经很精通了!往往事实却不以为然! 要接着讨论下面的问题,先来简单了解一下activity,来看一段原文的说明,如下: An activity is a single, focused thing that the user can do.  Almost all activities interact with the user, so the Activity class takes care of creat

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"

Android总结篇系列:Activity生命周期

Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部.Acitivity一般意义上有四种状态: 1.当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态: 2.当Activity失去了焦点但

Activity生命周期(深入理解)

今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activ

Android Activity生命周期

从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个activity处于活动状态 b.暂停状态  activity可视但失去焦点(被其它activity部分遮盖或者处于透明activiy下) c.停止状态  activity完全被另外一个activity遮挡,但保留用户状态信息d.非活动状态  activity尚未启动或者已经被手动终止或者由于内存不足

两分钟彻底让你明白Android Activity生命周期(图文)!

首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的): Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码: 1 public class Activity extends ApplicationContext { 2         protected void onCreate(Bundle savedInstanceState);        3