lifecycle java_Lifecycle.java

/*

* Copyright (C) 2016 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.android.settingslib.core.lifecycle;

import static androidx.lifecycle.Lifecycle.Event.ON_ANY;

import android.annotation.UiThread;

import android.content.Context;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import androidx.annotation.NonNull;

import androidx.annotation.Nullable;

import androidx.lifecycle.LifecycleOwner;

import androidx.lifecycle.LifecycleRegistry;

import androidx.lifecycle.OnLifecycleEvent;

import androidx.preference.PreferenceScreen;

import com.android.settingslib.core.lifecycle.events.OnAttach;

import com.android.settingslib.core.lifecycle.events.OnCreate;

import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;

import com.android.settingslib.core.lifecycle.events.OnDestroy;

import com.android.settingslib.core.lifecycle.events.OnOptionsItemSelected;

import com.android.settingslib.core.lifecycle.events.OnPause;

import com.android.settingslib.core.lifecycle.events.OnPrepareOptionsMenu;

import com.android.settingslib.core.lifecycle.events.OnResume;

import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;

import com.android.settingslib.core.lifecycle.events.OnStart;

import com.android.settingslib.core.lifecycle.events.OnStop;

import com.android.settingslib.core.lifecycle.events.SetPreferenceScreen;

import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;

import java.util.List;

/**

* Dispatcher for lifecycle events.

*/

public class Lifecycle extends LifecycleRegistry {

private static final String TAG = "LifecycleObserver";

private final ListmObservers = new ArrayList<>();

private final LifecycleProxy mProxy = new LifecycleProxy();

/**

* Creates a new LifecycleRegistry for the given provider.

*

* You should usually create this inside your LifecycleOwner class's constructor and hold

* onto the same instance.

*

* @param provider The owner LifecycleOwner

*/

public Lifecycle(@NonNull LifecycleOwner provider) {

super(provider);

addObserver(mProxy);

}

/**

* Registers a new observer of lifecycle events.

*/

@UiThread

@Override

public void addObserver(androidx.lifecycle.LifecycleObserver observer) {

ThreadUtils.ensureMainThread();

super.addObserver(observer);

if (observer instanceof LifecycleObserver) {

mObservers.add((LifecycleObserver) observer);

}

}

@UiThread

@Override

public void removeObserver(androidx.lifecycle.LifecycleObserver observer) {

ThreadUtils.ensureMainThread();

super.removeObserver(observer);

if (observer instanceof LifecycleObserver) {

mObservers.remove(observer);

}

}

public void onAttach(Context context) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnAttach) {

((OnAttach) observer).onAttach(context);

}

}

}

// This method is not called from the proxy because it does not have access to the

// savedInstanceState

public void onCreate(Bundle savedInstanceState) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnCreate) {

((OnCreate) observer).onCreate(savedInstanceState);

}

}

}

private void onStart() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnStart) {

((OnStart) observer).onStart();

}

}

}

public void setPreferenceScreen(PreferenceScreen preferenceScreen) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof SetPreferenceScreen) {

((SetPreferenceScreen) observer).setPreferenceScreen(preferenceScreen);

}

}

}

private void onResume() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnResume) {

((OnResume) observer).onResume();

}

}

}

private void onPause() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnPause) {

((OnPause) observer).onPause();

}

}

}

public void onSaveInstanceState(Bundle outState) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnSaveInstanceState) {

((OnSaveInstanceState) observer).onSaveInstanceState(outState);

}

}

}

private void onStop() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnStop) {

((OnStop) observer).onStop();

}

}

}

private void onDestroy() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnDestroy) {

((OnDestroy) observer).onDestroy();

}

}

}

public void onCreateOptionsMenu(final Menu menu, final @Nullable MenuInflater inflater) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnCreateOptionsMenu) {

((OnCreateOptionsMenu) observer).onCreateOptionsMenu(menu, inflater);

}

}

}

public void onPrepareOptionsMenu(final Menu menu) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnPrepareOptionsMenu) {

((OnPrepareOptionsMenu) observer).onPrepareOptionsMenu(menu);

}

}

}

public boolean onOptionsItemSelected(final MenuItem menuItem) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnOptionsItemSelected) {

if (((OnOptionsItemSelected) observer).onOptionsItemSelected(menuItem)) {

return true;

}

}

}

return false;

}

private class LifecycleProxy

implements androidx.lifecycle.LifecycleObserver {

@OnLifecycleEvent(ON_ANY)

public void onLifecycleEvent(LifecycleOwner owner, Event event) {

switch (event) {

case ON_CREATE:

// onCreate is called directly since we don't have savedInstanceState here

break;

case ON_START:

onStart();

break;

case ON_RESUME:

onResume();

break;

case ON_PAUSE:

onPause();

break;

case ON_STOP:

onStop();

break;

case ON_DESTROY:

onDestroy();

break;

case ON_ANY:

Log.wtf(TAG, "Should not receive an 'ANY' event!");

break;

}

}

}

}

Java程序

|

240行

|

8.42 KB

/*

* Copyright (C) 2016 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.android.settingslib.core.lifecycle;

import static androidx.lifecycle.Lifecycle.Event.ON_ANY;

import android.annotation.UiThread;

import android.content.Context;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import androidx.annotation.NonNull;

import androidx.annotation.Nullable;

import androidx.lifecycle.LifecycleOwner;

import androidx.lifecycle.LifecycleRegistry;

import androidx.lifecycle.OnLifecycleEvent;

import androidx.preference.PreferenceScreen;

import com.android.settingslib.core.lifecycle.events.OnAttach;

import com.android.settingslib.core.lifecycle.events.OnCreate;

import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;

import com.android.settingslib.core.lifecycle.events.OnDestroy;

import com.android.settingslib.core.lifecycle.events.OnOptionsItemSelected;

import com.android.settingslib.core.lifecycle.events.OnPause;

import com.android.settingslib.core.lifecycle.events.OnPrepareOptionsMenu;

import com.android.settingslib.core.lifecycle.events.OnResume;

import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;

import com.android.settingslib.core.lifecycle.events.OnStart;

import com.android.settingslib.core.lifecycle.events.OnStop;

import com.android.settingslib.core.lifecycle.events.SetPreferenceScreen;

import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;

import java.util.List;

/**

* Dispatcher for lifecycle events.

*/

public class Lifecycle extends LifecycleRegistry {

private static final String TAG = "LifecycleObserver";

private final List mObservers = new ArrayList<>();

private final LifecycleProxy mProxy = new LifecycleProxy();

/**

* Creates a new LifecycleRegistry for the given provider.

*

* You should usually create this inside your LifecycleOwner class's constructor and hold

* onto the same instance.

*

* @param provider The owner LifecycleOwner

*/

public Lifecycle(@NonNull LifecycleOwner provider) {

super(provider);

addObserver(mProxy);

}

/**

* Registers a new observer of lifecycle events.

*/

@UiThread

@Override

public void addObserver(androidx.lifecycle.LifecycleObserver observer) {

ThreadUtils.ensureMainThread();

super.addObserver(observer);

if (observer instanceof LifecycleObserver) {

mObservers.add((LifecycleObserver) observer);

}

}

@UiThread

@Override

public void removeObserver(androidx.lifecycle.LifecycleObserver observer) {

ThreadUtils.ensureMainThread();

super.removeObserver(observer);

if (observer instanceof LifecycleObserver) {

mObservers.remove(observer);

}

}

public void onAttach(Context context) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnAttach) {

((OnAttach) observer).onAttach(context);

}

}

}

// This method is not called from the proxy because it does not have access to the

// savedInstanceState

public void onCreate(Bundle savedInstanceState) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnCreate) {

((OnCreate) observer).onCreate(savedInstanceState);

}

}

}

private void onStart() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnStart) {

((OnStart) observer).onStart();

}

}

}

public void setPreferenceScreen(PreferenceScreen preferenceScreen) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof SetPreferenceScreen) {

((SetPreferenceScreen) observer).setPreferenceScreen(preferenceScreen);

}

}

}

private void onResume() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnResume) {

((OnResume) observer).onResume();

}

}

}

private void onPause() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnPause) {

((OnPause) observer).onPause();

}

}

}

public void onSaveInstanceState(Bundle outState) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnSaveInstanceState) {

((OnSaveInstanceState) observer).onSaveInstanceState(outState);

}

}

}

private void onStop() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnStop) {

((OnStop) observer).onStop();

}

}

}

private void onDestroy() {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnDestroy) {

((OnDestroy) observer).onDestroy();

}

}

}

public void onCreateOptionsMenu(final Menu menu, final @Nullable MenuInflater inflater) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnCreateOptionsMenu) {

((OnCreateOptionsMenu) observer).onCreateOptionsMenu(menu, inflater);

}

}

}

public void onPrepareOptionsMenu(final Menu menu) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnPrepareOptionsMenu) {

((OnPrepareOptionsMenu) observer).onPrepareOptionsMenu(menu);

}

}

}

public boolean onOptionsItemSelected(final MenuItem menuItem) {

for (int i = 0, size = mObservers.size(); i < size; i++) {

final LifecycleObserver observer = mObservers.get(i);

if (observer instanceof OnOptionsItemSelected) {

if (((OnOptionsItemSelected) observer).onOptionsItemSelected(menuItem)) {

return true;

}

}

}

return false;

}

private class LifecycleProxy

implements androidx.lifecycle.LifecycleObserver {

@OnLifecycleEvent(ON_ANY)

public void onLifecycleEvent(LifecycleOwner owner, Event event) {

switch (event) {

case ON_CREATE:

// onCreate is called directly since we don't have savedInstanceState here

break;

case ON_START:

onStart();

break;

case ON_RESUME:

onResume();

break;

case ON_PAUSE:

onPause();

break;

case ON_STOP:

onStop();

break;

case ON_DESTROY:

onDestroy();

break;

case ON_ANY:

Log.wtf(TAG, "Should not receive an 'ANY' event!");

break;

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值