女神镇楼
在一个APP的从启动到和用户交互,一般只会见到一次启动页,当App在后台,且内存不足的情况下,application被销毁,再次切到app的时候会再出现一次启动页。So,如果想过一段时间就显示启动页,该怎么办呢?
之前想了一个思路,做了一下测试,觉得还可以。主要思路是:我们定义当app在后台的时间超过3s(可自行定义)的时候,再次打开app的时候就显示启动页,这样就需要在app stop的时候记录一个时间,然后在resume的时候再拿当前时间和记录的时间对比,超过3s就显示。效果如下:
主要工作就是判断app是否在后台,以及在后台的时间。参考链接如下:参考链接
实现方法:
1.在application里定义一个变量记录应用进入后台的时间
2.在BaseActivity中的resume中判断在application中定义的变量是否为默认值,如不是,则判断当前时间跟记录时间的差值,若大于定义时间,则进入欢迎页。在onStop方法中判断app时候进入的后台,如是则记录当前时间,否则则初始化时间。
/**
* Created by Administrator on 2017/12/14.
* 每隔一段时间启动欢迎页
*/
public class MyApplication extends Application {
public static long stopMills;//stop的时间
@Override
public void onCreate() {
super.onCreate();
stopMills = -1;
// 注册
registerActivityLifecycleCallbacks(new MyActivityLifecycleCallback());
}
}
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{
/**
* 获取上个界面传过来的数据
* @param bundle
*/
public abstract void getParms(Bundle bundle);
/**
* 获取布局的id
*/
public abstract int getLayoutId();
/**
* 初始化view
*/
public abstract void initView();
/**
* 进入activity要执行的任务
*/
public abstract void doTask();
/**
* 点击事件
* @param view
*/
public abstract void onWidgetClick(View view);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
Intent intent = getIntent();
if (intent != null){
getParms(intent.getExtras());
}else{
getParms(new Bundle());
}
ButterKnife.bind(this);
initView();
doTask();
}
@Override
protected void onResume() {
super.onResume();
//判断是否要显示launcheractivitry
//间隔时间大于5s时显示
if (MyApplication.stopMills != -1 && System.currentTimeMillis() - MyApplication.stopMills > 5000) {
startActivity(LauncherShowActivity.class, null);
MyApplication.stopMills = -1;
}
}
@Override
protected void onStart() {
super.onStart();
// EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
// EventBus.getDefault().unregister(this);
if (MyActivityLifecycleCallback.isApplicationVisible()){
MyApplication.stopMills = -1;
}else{
MyApplication.stopMills = System.currentTimeMillis();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onClick(View v) {
onWidgetClick(v);
}
/**
* 重写startActivity
* @param class_
* @param bundle
*/
public void startActivity(Class<? extends BaseActivity> class_, Bundle bundle){
Intent intent = new Intent(this, class_);
if (bundle != null){
intent.putExtras(bundle);
}
startActivity(intent);
}
}
Demo资源下载链接
不知道为何不能设置0积分下载。嗯,回见。