Android面试题搜集
来源:互联网 发布:阴阳师挂机软件ios 编辑:程序博客网 时间:2024/06/04 19:32
1.关于listview的优化
(1)重用convertView,减少view对象的创建,获取布局的缓存.
(2)使用ViewHolder,减少孩子对象的创建,减少findViewById的次数,对控件实例进行缓存.
(3)static class viewHolder,采用静态内部类,避免潜在的由于内部类导致的内存泄露.
(4)在列表里面有图片的情况下,监听滑动事件,只有item选中的时候才加载图片.
(5)根据MVC思想对adapter进行抽取,分为初始化视图(V)和得到数据(M)展示数据两部分(C).抽取一个superBaseAdapter进行复用.
2.listView展示数据几种形式
(1)从sqlite数据库拉取数据源显示
(2)从xml使用pull解析拉取数据源显示
(3从网络中拉取数据进行展示,这也是开发中最常用的.
3.IPC(Inter-Process Communication,进程间通信)
(1)最常用的是AIDL:
示例:
//服务端的代码,做了权限package com.itanelse.alipay.service;import com.itanelse.alipay.aidl.AlipayRemoteService;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;public class AlipayService extends Service { private static final String TAG = "AlipayService"; private static final int LESS_MONEY = 0;// 钱不够 private static final int BUY_SUCCESS = 1;// 购买成功 class AlipayAgent extends AlipayRemoteService.Stub { @Override public int forwardPayMoney(float money) throws RemoteException { int result = pay(money); return result; } } @Override public IBinder onBind(Intent intent) { return new AlipayAgent(); } @Override public void onCreate() { Log.d(TAG, "服务创建了"); super.onCreate(); } public int pay(float money) { Log.d(TAG, "服务中的方法被调用了"); if (money < 150f) { return LESS_MONEY; } else { return BUY_SUCCESS; } } @Override public void onDestroy() { Log.d(TAG, "服务销毁了"); super.onDestroy(); }}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alipay.zhiubao" android:versionCode="1" android:versionName="1.0" > <permission android:name="oem.permission.SENDMAIL" android:protectionLevel="normal" > </permission> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.alipay.zhiubao.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.itanelse.alipay.service.AlipayService" android:permission="oem.permission.SENDMAIL" > <intent-filter> <action android:name="com.alipay.MONEY" /> </intent-filter> </service> </application></manifest>
package com.itcatchfish.fish;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.itanelse.alipay.aidl.AlipayRemoteService;public class MainActivity extends Activity { private EditText money; private AlipayRemoteService agent; // 调用远程服务返回的binder代理类 private static final int LESS_MONEY = 0;// 钱不够 private static final int BUY_SUCCESS = 1;// 购买成功 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); money = (EditText) findViewById(R.id.main_money); } public void bindService(View v) { Intent intent = new Intent(); intent.setAction("com.alipay.MONEY"); bindService(intent, new MyConn(), BIND_AUTO_CREATE); } private class MyConn implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { agent = AlipayRemoteService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } } public void call(View v) { float menoy = Float.valueOf(money.getText().toString()); try { int result = agent.forwardPayMoney(menoy); if (result == LESS_MONEY) { Toast.makeText(this, "钱不够", 1).show(); } else if (BUY_SUCCESS == result) { Toast.makeText(this, "购买成功", 1).show(); } } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "付款失败", 1).show(); } }}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itcatchfish.fish" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="oem.permission.SENDMAIL" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itcatchfish.fish.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
(2)步骤总结:
第一步,在服务端定义一个接口,在里面暴露出让客户端调用的方法,并把文件后缀改为aidl;如:IAlipayService
第二步,在服务端声明一个代理人类extends IAlipayService.Stub,并在这里调用服务端提供的远程方法;
第三步,在服务端通过onBind方法把该代理人类返回给调用者.
第四步,在客户端,把aidl接口包和里面的类拷贝到客户端工程目录,注意:必须一模一样;
第五步,在客户端,通过bindService的方法去绑定服务端的服务,这里需要一个ServiceConnection接口,我们写一个类实现该接口后,在它的onServiceConnected方法中获取到服务端中的代理人类,那么通过该代理人类就可以调用远程服务端的方法了.
第六步,我们的服务端的方法并不是可以任意调用的,这里可以添加一个权限,让调用者申请权限才可以调用.
4.
- Android面试题搜集
- Android和Java面试题搜集整理
- Java&Android面试题搜集整理
- 搜集c++面试题
- 面试题搜集
- google面试题搜集
- 经典面试题搜集
- 经典面试题搜集
- OC面试题[搜集]
- 面试题搜集
- 面试题搜集
- 面试题搜集
- 史上最全的Java&Android面试题搜集整理
- 史上最全的Java&Android面试题搜集整理
- 史上最全的Java&Android面试题搜集整理
- 史上最全的Java&Android面试题搜集整理
- 史上最全的Java&Android面试题搜集整理
- 史上最全的Java&Android面试题搜集整理
- Hbase存储数据结构
- 指针和数组的不同
- 网络-NSURLSession应用和原理
- 位运算:二进制中1的个数
- 字符串匹配
- Android面试题搜集
- 魔道研究
- AFNetworking框架使用
- 我终于深入参与了一个分布式系统了,好多想法不一样了
- [LeetCode]41 第一个缺失的整数
- 神经网络中的BP算法和Elman算法
- 关于MySQL服务安装\删除\启动\关闭 的批处理
- Matlab初级入门
- WPF配置工具-参考资源