发表于: 2018-12-11 19:56:40
0 920
一、今天完成的事情
finish()
finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理;当调用System.exit(0)时,杀死了整个进程,这时候活动所占的资源也会被释放。finish()在生命周期中,回调的时机位于onResume()和onPause()之间,主动调用finish()方法,顺序同样如此
Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会找到这个Activity。
Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间什么的都没有咯~~。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。
System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。
使用时,可以写在onDestory()方法内,亦可直接在想退出的地方直接调用:
如:System.exit(0); 或 android.os.Process.killProcess(android.os.Process.myPid());
我们平时习惯性的会把一些资源释放和销毁工作放在onDestroy()中进行,但是onDestroy()并不一定是在activity退出时就回被立刻回调,这样反复进入退出activity就有可能出现一些不可预知的错误,比如实际开发中业务逻辑会很多,就可能导致一些资源还没有被释放的情况被再次使用,所以在这种情况下,应该把这些资源释放销毁的动作放到finish()中进行,从而保证activity被频繁创建时不会出问题。
《阿里巴巴Android开发手册》中推荐不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的 销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在 Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。
装饰者模式
装饰者模式又名包装(Wrapper)模式,是继承关系的一个替代方案,装饰者模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展,提供了比继承更有弹性的替代方案。
用此模式实现RcyclerView上拉加载,这样每次需要实现上拉加载时只需使用装饰即可,不需要再将上加载逻辑 写在Adapter中。
优点
(1)装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态决定“贴上”一个需要的“装饰”,或者除掉一个不需要的“装饰”。继承关系则不同,继承关系是静态的,它在系统运行前就决定了。
(2)通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
缺点
由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。
二、明天的计划
支付宝 应用内支付
三、遇到的问题
更新RecyclerView时,让适配器中的List引用新的List,RecyclerView不会更新,但是用addAll()方法将数据添加到List中,可以更新
//此处list中为新获取到的数据
List<NewsTitle> list = ParseJSONUtil.parseJSONWithJSONObject(responseData);
让适配器中的newsList清空后直接引用新获取的list
newsList.clear();
newsList = list;
提示适配器更新(notifyDataSetChanged),但RecyclerView没有更新
但如果是用addAll(),则可以更新RecyclerView
newsList.addAll(list);
四、收获
finish()的用法
评论