package cn.qqtheme.androidpicker; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.CallSuper; import android.support.annotation.IdRes; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.v4.app.FragmentActivity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import cn.qqtheme.framework.util.LogUtils; /** * Activity的基类 * * @author 李玉江[QQ:1023694760] * @since 2014-4-20 */ public abstract class BaseActivity extends FragmentActivity { protected Context context; protected BaseActivity activity; protected String className = getClass().getSimpleName(); private List<LifeCycleListener> lifeCycleListeners = new ArrayList<LifeCycleListener>(); protected abstract View getContentView(); protected abstract void setContentViewAfter(View contentView); @CallSuper @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LogUtils.verbose(className + " onCreate"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityCreated(this); } context = getApplicationContext(); activity = this; //不显示标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); if (Build.VERSION.SDK_INT >= 21) { setTheme(android.R.style.Theme_Material_Light_NoActionBar); } else if (Build.VERSION.SDK_INT >= 13) { setTheme(android.R.style.Theme_Holo_Light_NoActionBar); } else { setTheme(android.R.style.Theme_Light_NoTitleBar); } //被系统回收后重启恢复 if (savedInstanceState != null) { LogUtils.verbose("savedInstanceState is not null"); onStateRestore(savedInstanceState); } //显示界面布局 View contentView = getContentView(); if (contentView == null) { TextView textView = new TextView(this); textView.setBackgroundColor(Color.RED); textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); textView.setGravity(Gravity.CENTER); textView.setText("请先初始化内容视图"); textView.setTextColor(Color.WHITE); contentView = textView; } LogUtils.verbose(className + " setContentView before"); setContentViewBefore(); setContentView(contentView); if (isTranslucentStatusBar()) { StatusBarUtil.setTransparent(activity); } setContentViewAfter(contentView); LogUtils.verbose(className + " setContentView after"); } protected void onStateRestore(@NonNull Bundle savedInstanceState) { } protected void setContentViewBefore() { LogUtils.verbose(className + " setContentView before"); } @Override public void onBackPressed() { super.onBackPressed(); LogUtils.verbose(className + " onBackPressed"); } @CallSuper @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); LogUtils.verbose(className + " onSaveInstanceState"); } @CallSuper @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); LogUtils.verbose(className + " onRestoreInstanceState"); } @CallSuper @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); LogUtils.verbose(className + " onConfigurationChanged"); } @CallSuper @Override public void onRestart() { super.onRestart(); LogUtils.verbose(className + " onRestart"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityRestarted(this); } } @CallSuper @Override public void onStart() { super.onStart(); LogUtils.verbose(className + " onStart"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityStarted(this); } //和removeActivity对应 AppManager.getInstance().addActivity(this); } @CallSuper @Override public void onResume() { super.onResume(); LogUtils.verbose(className + " onResume"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityResumed(this); } } @CallSuper @Override public void onPause() { super.onPause(); LogUtils.verbose(className + " onPause"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityPaused(this); } } @CallSuper @Override public void onStop() { super.onStop(); LogUtils.verbose(className + " onStop"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityStopped(this); } // 极端情况下,系统会杀死APP进程,并不执行onDestroy(), // 因此需要使用onStop()来释放资源,从而避免内存泄漏。 AppManager.getInstance().removeActivity(this); } @CallSuper @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); LogUtils.verbose(className + " onSaveInstanceState"); } @CallSuper @Override public void onDestroy() { super.onDestroy(); LogUtils.verbose(className + " onDestroy"); for (LifeCycleListener listener : lifeCycleListeners) { listener.onActivityDestroyed(this); } } @CallSuper @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); LogUtils.verbose(className + " onActivityResult"); } @CallSuper @Override public void onLowMemory() { super.onLowMemory(); LogUtils.verbose(className + " onLowMemory"); AppManager.getInstance().removeActivity(this); } protected boolean isTranslucentStatusBar() { return true; } protected <T> T inflateView(@LayoutRes int layoutResource) { LogUtils.verbose(className + " inflate view by layout resource"); //noinspection unchecked return (T) LayoutInflater.from(activity).inflate(layoutResource, null); } protected <T> T findView(@IdRes int id) { //noinspection unchecked return (T) findViewById(id); } public void addLifeCycleListener(LifeCycleListener listener) { if (lifeCycleListeners.contains(listener)) { return; } lifeCycleListeners.add(listener); } public void removeLifeCycleListener(LifeCycleListener listener) { lifeCycleListeners.remove(listener); } /** * Activity生命周期监听 */ public interface LifeCycleListener { void onActivityCreated(BaseActivity activity); void onActivityResumed(BaseActivity activity); void onActivityStarted(BaseActivity activity); void onActivityRestarted(BaseActivity activity); void onActivityPaused(BaseActivity activity); void onActivityStopped(BaseActivity activity); void onActivityDestroyed(BaseActivity activity); } }