android application

application方法:
registerComponentCallbacks() & unregisterComponentCallbacks()
onTrimMemory()
onLowMemory()
onConfigurationChanged()
onCreate()
registerActivityLifecycleCallbacks() & unregisterActivityLifecycleCallbacks()
onTerminate();


onTrimMemory():通知应用当前内存使用情况
场景:根据内存使用情况进行自身的内存资源的不同程度释放,避免被系统杀掉;


onLowMemory():系统整体内存较低的时候;
场景:android 4.0前检测内存使用情况,从而避免被系统直接杀掉;
特别注意: OnTrimMemory() & OnLowMemory() 关系: OnTrimMemory()OnLowMemory() Android 4.0后的替代 APIOnLowMemory() = OnTrimMemory()中的 TRIM_MEMORY_COMPLETE级别;
若想兼容 Android 4.0前,请使用 OnLowMemory();否则直接使用 OnTrimMemory()即可;

onConfigurationChanged():监听程序配置信息的改变时调用 如屏幕旋转;

registerActivityLifecycleCallbacks() & unregisterActivityLifecycleCallbacks():注册和销毁对程序内所有Activity生命周期监听(activity生命周期发生变化时就会调用);


onTerminate():程序结束时调用;

应用前后台切换逻辑

public class myapplication extends Application{

    private boolean isBackGround;

    @Override
    public void onCreate() {
        super.onCreate();

        registerActivityLifecycle();
    }

    /**
     * 低内存时,清理掉glide所有的内存缓存。
     */
    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Glide.get(this).clearMemory();
    }
    /**
     * 为开发者提供了一个合适的时机,用来释放掉一些不用的资源,从而让我们的应用在后台存活更长时间。
     * 其中level参数就代表我们的应用当前在内存中的状态,TRIM_MEMORY_UI_HIDDEN代表应用从前台切到了后台。
     * 这个时候我们便可以标记应用切换到了后台。
     * @param level
     *
     */
    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        if (level == TRIM_MEMORY_UI_HIDDEN) { //TRIM_MEMORY_UI_HIDDEN = 20;
            isBackGround = true;
            //app进入后台
            try {
                Glide.get(this).clearMemory();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        Glide.get(this).trimMemory(level);
    }

    /**
     * 应用前后台切换逻辑
     * 这个方案要求API大于等于14
     */
    private void registerActivityLifecycle() {

        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            //就是在 onPause() 创建一个延时检测任务,如果到时间内没有调用 onResume(),就说明应用暂停了
            //监听 Android 应用级别的恢复和暂停——打电话切换等
            private final Handler handler = new Handler(Looper.getMainLooper());
            private boolean active = false;
            private volatile long checkDelayTime = 100; // 延时检查时间,足够小但是保证 onResume() 可以进入到下一次主循环
            private boolean checking = false;
            private final Runnable checkRunnable = new Runnable() {
                @Override
                public void run() {
                    synchronized (checkRunnable) {
                        checking = false;
                        if (active) {
                            active = false;
                            // TODO 处理应用被暂停的逻辑
                            //应用被暂停,前台----后台
                        }
                    }
                }
            };

            @Override
            public void onActivityStarted(Activity activity) {
            }

            @Override
            public void onActivityStopped(Activity activity) {
            }


            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            }


            @Override
            public void onActivityResumed(Activity activity) {
                synchronized (checkRunnable) {
                    if (checking) {
                        handler.removeCallbacks(checkRunnable);
                        checking = false;
                    }
                    if (!active) {
                        active = true;
                        // TODO 处理应用被恢复的逻辑
                        //后台----前台
                    }
                }
            }

            @Override
            public void onActivityPaused(Activity activity) {
                synchronized (checkRunnable) {
                    if (active) {
                        handler.removeCallbacks(checkRunnable);
                        handler.postDelayed(checkRunnable, checkDelayTime);
                        checking = true;
                    }
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
    }
}














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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值