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> @Override protected 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() { @Override public 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); // 注册本地广播监听器 } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); } class LocalReceiver extends BroadcastReceiver { @Override public 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各是什么?有何用处?