android面试题
一、选择题
1.1 下面代码不抛出异常时输出 :frist ,final
public static void main(String[] args) { try { System.out.println("frist"); return ; } catch (Exception e) { } finally { System.out.println("finally"); } }
二、问答题
2.1、android几种定时器的机制及差别。
答:在android中,经经常使用到的定时器主要有下面几种实现:
1、採用handler与线程的sleep(long)方法
开启一个线程。,每隔1s向Handler发送消息
public class MainActivity extends Activity { private Handler myhandler; private static int timemessage=0x01; private int timer=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myhandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if(msg.what==timemessage){ System.out.println("timer="+(++timer)); } } }; new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while(true){ try { System.out.println("运行了"); Thread.sleep(2000); myhandler.sendEmptyMessage(timemessage); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start(); } }
2、 採用Handler自带的postDelayed(Runnable,long)方法
利用延迟几秒发送Message。嵌套postDelayed()实现定时器。
public class MainActivity extends Activity { private Handler myhandler; private static int timemessage = 0x01; private int timer = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myhandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if (msg.what == timemessage) { System.out.println("timer=" + (++timer)); } } }; myhandler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub myhandler.sendEmptyMessage(timemessage); myhandler.postDelayed(this, 1000); if (timer == 10) { myhandler.removeMessages(timemessage); } } }, 1000); } }
3、 採用Handler与Timer、TimerTask结合的方法
利用Timer类的schedule()方法。每隔一段时间做什么事情实现定时器。
public class MainActivity extends Activity { private Handler myhandler; private static int timemessage = 0x01; private int timer = 0; private Timer timerobject; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myhandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if (msg.what == timemessage) { System.out.println("timer=" + (++timer)); } } }; timerobject=new Timer(); timerobject.schedule(new TimerTask() { //1s后,在每隔1s做什么事情 @Override public void run() { // TODO Auto-generated method stub myhandler.sendEmptyMessage(timemessage); } }, 1000,1000); } }
2.2 利用Listview显示姓名和年龄,採用SimpleAdapter实现。
public class MainActivity extends Activity { private ListView mylistview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mylistview = (ListView) findViewById(R.id.listviewid); List<Map<String, Object>> listdata = new ArrayList<Map<String, Object>>(); //每行显示是一个Map对象 for (int i = 0; i < 10; i++) { Map mapdata = new HashMap<String, Object>(); mapdata.put("name", "limi"); mapdata.put("age", "30"); listdata.add(mapdata); } //第二个參数是ListView行布局 //第三个參数为存放Map元素的key值 //第四个參数将key值相应的元素在布局哪里显示 SimpleAdapter myadpter = new SimpleAdapter(getApplicationContext(), listdata, R.layout.listviewdatalayout, new String[] { "name", "age" }, new int[] { R.id.name, R.id.age }); mylistview.setAdapter(myadpter); } }
2.3、Android单例模式应用及长处
单例模式确保某一个类仅仅有一个实例。通过使用private的构造函数确保在应用中仅仅产生一个实例。
因为单例模式在内存中仅仅有一个实例,降低了内存开销。
单例模式能够避免对资源的多重占用,比如一个写文件时,因为仅仅有一个实例存在内存中。避免了对同一个资源的同一时候写操作。
使用单例模式,解决的就是多线程的同一时候创建的问题。
public class Person{ private Person(){}; private static Person zongtong; public static Person getPersonStance(){ if(zongtong==null){ synchronized(Person.class){ if(zongtong==null){ zongtong=new Person(); } } } return zongtong; } }
2.4、二分查找算法
public static int twoDivideSearch(int[] arr, int findValue) { int startIndex = 0; int endIndex = arr.length - 1; while (startIndex <= endIndex) { int middleIndex = ((endIndex - startIndex+1) / 2)-1; int middleValue = arr[middleIndex]; if (findValue == middleValue) return middleIndex; else if (findValue < middleValue) { endIndex = middleValue - 1; } else { startIndex = middleValue + 1; } } return -1; }
2.5 请画出你主导的最有成就感一款app的模块架构图,并指出模块依赖关系。
2.6 使用Android数据库创建一个通信表(属性:姓名、号码、性别)。并提供查询,加入的contentprovider。
2.7 实现一个5秒的启动页面,然后跳转到MainActivity,须要考虑到当启动页面被提前关闭时计数器取消的情况。
2.8 在Activity实现动态创建广播和注销广播。
2.9 实现一个移位动画。要求有回弹动作。xml或代码实现均可。(提示能够使用BounceInterpolator)
2.10 请实现一个二分查找
2.11 已知整型数组age【N】中存放了一个组织全部成员的年龄。请实现一个线性的排序算法。将数组中的值从大到小的顺序输出。
2.12 给出一个函数输出一个字符串的全部排列
posted on 2017-07-12 17:44 yjbjingcha 阅读(120) 评论(0) 编辑 收藏 举报