在某些场景下,比如说当我们的应用返回到后台时,等用户再次回到应用,要弹出一个框,作为提示,或者还有一些供用户操作的按钮。
功能可能比较简单,纯属做个记录,实现方式多样,下面就说说
1.涉及到的页面都继承一个BaseActivity,差不多所有的逻辑都在这个base里面来写了。
2.这里还需要知道所有的页面此时都不可见。系统自带了这种方法。写一个类直接实现系统方法:Application.ActivityLifecycleCallbacks
1)public class ActivityLifecycleController implements Application.ActivityLifecycleCallbacks {
private static boolean isAppInForeground;
private static int started;
public ActivityLifecycleController() {
started = 0;
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
++started;
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
--started;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
//可见的数量
public static int getStartedCount(){
return started;
}
}
2)一般都会有自己的一个BaseApplication,继承系统的Application。在onCreate方法中来初始化前面的生命周期控制类:registerActivityLifecycleCallbacks(new ActivityLifecycleController());
3.准备工作完成,用户返回后台的操作有可能是通过Home键或者菜单键,此时通过在onStop方法中来调用上面控制类的方法:
int startActivityCount = ActivityLifecycleController.getStartedCount();
当数量为0时,所有的页面都走了stop,说明此时应用已返回到了后台。这里可以设置一个值来记住,在onResume方法中,通过判断此值,你可以选择弹窗或吐司。
4.说到弹窗,现在也不建议用popwindow或者去继承dialog。推荐使用DialogFragment,它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。例如旋屏,基于DialogFragment的对话框将会由FragmentManager自动重建,然而基于Dialog实现的对话框则没有这样的能力。
》》这里写个比较通用的方法
//新建
public static void newsInstance(FragmentManager fm) {
FragmentTransaction fragmentTransaction = fm.beginTransaction();
Fragment fragment = fm.findFragmentByTag(“TestDialog”);
if (null != fragment) {
fragmentTransaction.remove(fragment);
}
TestDialog testDialog= new TestDialog();
myDialogFragment.show(fragmentTransaction, “TestDialog”);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
View view=LayoutInflater.from(getActivity()).inflate(R.layout.fragment_dialog_study_record_rule, container,false);
return view;
}
这里可以说下有人创建可能不是这种方法,而是在onCreateDialog方法中,但平时的使用中我并没有采用,大多情况下弹窗都会有些圆角背景,若是用了这个方法没有效果。若有大神知道还请告知一二。