18.03
记录自己18年三月学习中遇到的部分问题
问题:
- Activity的四种启动模式应用实例?实际使用时各个模式的应用场景?
- SharePreferences具体是什么?数据可以存储多长时间?
- git init命令的使用?
- 接口回调机制怎么回事?
- startService和bindService区别?
- 静态方法
解决:
1.Activity的四种启动模式应用实例?实际使用时各个模式的应用场景?
一个项目中会包括多个Activity,系统使用“任务栈”来存储创建的Activity实例。如果没有设置启动模式,采用默认的启动模式。多次启动同一个Activity系统会重复创建多个实例,浪费内存。
**一:**Standard标准模式,标准模式即默认模式。每次启动一个Activity都会又一次创建一个新的实例,无论这个实力是否存在。
**二:**SingleTop栈顶复用模式,两种情况:
1. 要创建的Activity已经处于栈顶,直接复用栈顶的Activity,不会再创建新的Activity**(复用时它的onCreate,onStart不会被调用,由于它并没有发生改变。但是一个新方法onNewIntent会被回掉(Activity被正常创建时不会调用此方法))**
2. 不处于栈顶时,会又一次创建一个新的Activity入栈(Standard模式)
实际场景:
1. 通知栏弹出Notification,点击Notification跳转到指定Activity,但是如果我现在页面就停留在那个指定的Activity,会再次打开我当前的Activity,这样返回的时候回退的页面和当前页面一样,感官上就会很奇怪
2. 点击两次登陆时,会产生两个登陆成功的界面。
**三:**SingleTask栈内复用模式,要创建的Activity处于栈中,不会创建新的Activity,而是将存在栈中的Activity上面的其它Activity全部销毁,使它成为栈顶。(和SingleTop一样会回调onNewOntent方法)
实际场景:
1. a界面购物,b界面确认订单,c界面付款,如果付款成功会跳到a,如果不付款则返回b,这时候重启a就会用到singleTask.
**四:**SingleInstance单实例模式:
很特殊,因为是全局单例模式,是一种加强的SingleTask模式。他除了具有它所有的特殊属性外,还强调:具有此模式的Activity仅仅能单独位于一个任务栈中
2.SharePreferences具体是什么?数据可以存储多长时间?
获取SharePreferences两种方式:
- 调用Context对象的getSharedPreferences()方法
- 调用Activity对象的getPreferences()方法
区别:
- Context获得的SharePreferences对象可以被统一应用下的其他组件使用
- Activity获得的SharePreferences对象只能再该Activity中使用
3.git init命令的使用?
工作目录”是通过使用“git init“或“git clone”创建的本地项目拷贝。我们可以在工作目录下面修改和测试代码。通过测试后我们可以使用“git add“和”git commit“命令本地提交修改,然后使用“git push”命令向远程 bare repository库提交更新,通常bare repository指定其他服务器,其他开发者将可以及时看到你的更新。当我们想去更新本地工作目录的时候,我们可以使用“git pull”命令去接受其他开发者提交的更新。
4.接口回调机制怎么回事?
5.startService和bindService区别?
6.静态方法
- 如果某些操作不依赖具体实例,那它就是静态的,反之如果某些操作是依赖具体实例的(例如访问一个特定会员的名称),那它就应该是实例化的。
- 静态方法不用new对象可以直接调用
- 1.与类相关与对象无关
2.不需要对象的“轻”方法
3.工厂方法 - 如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快.
- 可以直接拿来就用的方法,就算是静态的.
- 肯定不涉及具体对象,因为静态方法内,是无法直接使用任何非静态成员的。
- (1)制作工具类
(2)可以当作"作局"对象或方法来使用 - 静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
- 静态方法不用创建实例就可调用,比较简单从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法
- 不需要生成对象的
经常频繁使用的
工具类里的(如SqlHelper) - 适当地使用static方法本身并没有什么,当一个人从来不懂使用多态、接口设计时,很自然地会滥用static方法。
- 个人理解在多个类中需要调用并且是与对象无关的方法可设为静态方法,方便调用。
- 所有对象共有的方法
- 再不关系到任何于特定对象相关的操作 比如学生的年龄就是学生的相关。 修改学生的年龄就不适合用静态方法。 一般来说,如果你的方法里没有用到this关键字, 那就适合用静态方法
- 通常通用的类中一些常用的方法可以设计为静态类
- 只要是没有用到类的状态信息,只从参数获取信息的都可以为静态的
- 可以实现某些特殊的设计模式:如Singleton
- 由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部
- 可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好
- 总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的
- 静态方法与非静态方法最明显的区别就是如果某个方法是公共静态的,那么可以直接通过类名.方法名的方法来调用,而公共实例方法则需要事先实例化对象,然后才能调用。