日拱一卒(七)
Android难点:
1.Activity的启动模式:standard,singletop,singleinstance,singletask什么区别?
standard:启动的Acitivity在栈中有多个实例
singletop:启动的Activity如果处于栈顶,再次启动Activity则不会创建新的实例
singletask:如果栈中没有实例,则创建一个新的实例,否则将该实例上的Activity统统出栈,后使用该实例。
singleInstance:创建单独的一个栈存放该Activity。例子:ActA -->ActB-->ActC,ActB为singletask模式,其他为standard,按返回,则调用的顺序:ActC----->ActA-->ActB.原因是ActA与ActC处于同一个栈,ActC处于栈顶,ActB处于另一个栈,先清空ActC所处的栈在跳到ActB所处的栈。
2.ListView的Adapter的ViewHolder有什么作用?怎么使用?
3.Fragment(碎片)的add和remove什么区别?addToBackStack有什么用?如何同一个activity在平板和手机加载不同的布局?记录listview中view的引用,减少findViewById的耗时操作;
使用:Adapter的getView方法中,如果convertView没生成,生成convertView的时候用ViewHolder记录convetView的引用,并将ViewHolder通过convertView的setTag的方法保存。否则通过convertView的getTag方法得到ViewHolder
add:新增一个Fragment到现在的ViewGroup中
remove:将ViewGroup现有的Fragment替换成现有的Fragemnt
addToBackStack:将Fragment加入历史栈,按back键时返回栈中的Fragment。
4.Activity与Activity怎么通信?Activity与Service怎么通信?
activity与activity通信:startActivityResult或者更灵活的BroadCast
activity与service通信:BroadCast或者BindSerivice
5.什么是有序广播,与标准广播有什么区别?广播接收器的静态注册和动态注册什么区别?
有序广播:同步执行的广播,同一个时刻只有一个广播接收器接收到这条广播。通过有序广播设置接受广播的先后顺序,在传递过程中通过abortBroadcast终止往下传递
标准广播:异步执行的广播,广播接收器几乎在同一时刻接收到这条广播。
动态注册:在代码注册;应用启动时再能接受广播,需要手动反注册。
静态注册:在AndroidManifest注册;程序没启动也能接受广播
6.什么是本地广播?
只能在应用本身内部传递的广播,可以解决系统全局广播的安全性问题。
如何使用?
public class MainActivity extends Activity {private IntentFilter intentFilter;private LocalReceiver localReceiver;<span style="color:#ff0000;">private LocalBroadcastManager localBroadcastManager;</span>@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);<span style="color:#ff0000;">localBroadcastManager = LocalBroadcastManager.getInstance(this); // 获取实例</span>Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {<span style="color:#ff0000;">Intent intent = new Intent("com.example.broadcasttest. LOCAL_BROADCAST");localBroadcastManager.sendBroadcast(intent); // 发送本地广播</span>}});intentFilter = new IntentFilter();intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");localReceiver = new LocalReceiver();localBroadcastManager.registerReceiver(localReceiver, intentFilter); // 注册本地广播监听器}@Overrideprotected void onDestroy() {super.onDestroy();localBroadcastManager.unregisterReceiver(localReceiver);}class LocalReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();}}}注意:(1)本地广播是无法通过静态注册的方式来接收的(2)比系统全局广播更加高效
(2)本地广播的注册反注册,接收都要一致即:都需要带上LocalBroadcastManager.getInstance(context).;如果发送的没带,则认为是系统广播,相应注册的广播接收器是收不到消息的。系统广播亦同。
最佳应用实例:在被迫下线的时候弹出dialog通知用户
7.MeasureSpec中的三个模式EXACTLY,AT_MOST,UNSPECIFIED什么区别?
8.android.intent.category.DEFAULT与android.intent.category.LAUNCHER什么区别?
9.View和ViewGroup的事件处理机制
10.Android中的缓存机制与实现
11.加载移动设备的图片时,如何防止图片加载引起的卡顿,内存溢出?
12.请说说SoftReference,WeakReference,PhantomReference各是什么?有何用处?
更多相关文章
- BroadcastReceiver之实现锁屏、解锁例子
- [置顶] Android之Fragment的前世今生(二)
- android broastcast详解
- tabhost中setup()和setup(LocalActivityManager activityGroup)
- android定位和地图开发实例
- android轻量级开源缓存框架——ASimpleCache
- 学习BroadcastReceiver
- Android开机启动Activity或者Service方法---------------一直保
- Android自动化测试之Monkeyrunner使用方法及实例