android 面试题
来源:互联网 发布:淘宝上的销量是真的吗 编辑:程序博客网 时间:2024/05/24 22:41
前阵子面试了一间公司,有好几道题android 的基础题比较模糊,这些题都比较基础,
但平时开发不怎么注意文字上的表达,感觉这些基础还是很重要的,毕竟是敲门砖,
所以今天就一些基础面试题做一下总结。
现在总结一下:
选择题:
1.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行( D ) A、onPause() B、onCreate() C、 onResume() D、onStart()
这道题尤其重要,因为是众多公司面试时必考的题目,当然要确切地弄清楚为什么是onStart。(当然我个人觉得onResume()也可以)
-------------------------------------------------------- 分界线 -----------------------------------------------------
填空题:
android activity 的启动模式:
1.standard(系统默认)
标准启动模式,每次激活Activity时都会创建activity,并放入任务栈中
2.singletop
如果在任务的栈顶正好存在该Activity 的实例,就重用该实例,若不是就会创建新的实例并放入栈顶(即使栈中已经存在该Activity的实例,只要其不在栈顶,都会创建实例)
3.singleTask
如果在栈中已经有该Activity 实例,就重用该实例(会调用是咧的onNewIntent()).重用时,会让该实例回到栈顶,因此在它上面的实例回被移除出栈,如果栈中不存在该实例,则将会创建新的实例放入栈中。
4.singleInstance
在一个新栈中创建该Acitivity实例,并让多个应用共享该栈中的该Activity实例。
android 的存储方式:
1.sharepreference
其本质就是一个xml文件,常用于存储较简单的参数设置,一些静态的键值对。
2.FileOutputStream/FileinputStream:
文件输出/输入流,常用存储大量的数据,缺点更新困难。
3.sqlite
轻量级数据库,常用
4.ContentPriovider
内容提供者,使用应用程序数据共享
service 的启动方式:
startService
bindService
这几道题是比较基础的填空题,必须要懂,而且要懂得写。
-------------------------------------------------------- 分界线 -----------------------------------------------------
分析题:
handler Runnale MessageQueue 和 loop的关系
handler 用于处理 Runnale 和message,而它们和线程相关联,而一个线程与有且知有一个MessageQueue 和 一个loop。
Handler简介:
Handler有两个主要的用途:(1)确定在将来的某个时间点执行一个或者一些Message和Runnable对象。(2)在其他线程(不是Handler绑定线程)中排入一些要执行的动作。
handler 有几个方法是常用的:
post(Runnable):Runnable在handler绑定的线程上执行,也就是说不创建新线程。
sendMessage(Message):
MessageQueue简介:
这是一个包含message列表的底层类。Looper负责分发这些message。Messages并不是直接加到一个MessageQueue中,而是通过MessageQueue.IdleHandler关联到Looper。
你可以通过Looper.myQueue()从当前线程中获取MessageQueue。
Looper简介:
Looper类被用来执行一个线程中的message循环。默认情况,没有一个消息循环关联到线程。在线程中调用prepare()创建一个Looper,然后用loop()来处理messages,直到循环终止。
大多数和message loop的交互是通过Handler。
下面是一个典型的带有Looper的线程实现。
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public voidhandleMessage(Message msg) {
// process incomingmessages here
}
};
Looper.loop();
}
}
这道题到现在我还模糊不清,好似懂又非懂,就略懂吧!求大神能简要的说明一下!
-------------------------------------------------------- 分界线 -----------------------------------------------------
编程题:
1.将图片放大和缩小:
package com.example.bigsmallimage;import android.os.Bundle;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity {private Button bigbutton;private Button smallButton;private ImageView imageview;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bigbutton = (Button) findViewById(R.id.button1);smallButton = (Button) findViewById(R.id.button2);imageview = (ImageView) findViewById(R.id.imageView1);bigbutton.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubBitmap dddsss = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);big(dddsss);}});smallButton.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubBitmap dddsss = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);small(dddsss);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}private float width = 1;private float height = 1;private int id = 0;public void small(Bitmap bitmap) {int bitmapwidth = bitmap.getWidth();int bitmapheight = bitmap.getHeight();double scare = 0.8;width = (float) (width * scare);height = (float) (height * scare);Matrix matrix = new Matrix();matrix.postScale(width, height);Bitmap caschbitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapwidth,bitmapheight, matrix, true);imageview.setImageBitmap(caschbitmap);}public void big(Bitmap bitmap){int bitmapwidth = bitmap.getWidth();int bitmapheight = bitmap.getHeight();double scare = 1.2;width = (float) (width * scare);height = (float) (height * scare);Matrix matrix = new Matrix();matrix.postScale(width, height);Bitmap caschbitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapwidth,bitmapheight, matrix, true);imageview.setImageBitmap(caschbitmap);}}
2.编写一个ProgressBar 进度条的实现:
package com.example.threadtest;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.app.Activity;import android.app.ProgressDialog;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;public class MainActivity extends Activity {private ProgressBar ProgressBar1;private Button kaishibutton;private Button zantingbutton;private Handler mhandler;private ProgressBar ProgressBar2;private ProgressDialog ProgressDialog1;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ProgressBar1 = (ProgressBar) findViewById(R.id.progressBar1);kaishibutton = (Button) findViewById(R.id.kaishi);zantingbutton = (Button) findViewById(R.id.zanting);ProgressBar2 = new ProgressBar(this);ProgressDialog1 = new ProgressDialog(this);ProgressDialog1.show();Thread thread1 = new Thread(new Runnable() {public void run() {// TODO Auto-generated method stubtry {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}ProgressDialog1.dismiss();}});// thread1.start();mhandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubSystem.out.println("---" + msg.what);ProgressBar1.setProgress(msg.what);super.handleMessage(msg);}};kaishibutton.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubmhandler.post(threadRunnable);}});zantingbutton.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubmhandler.removeCallbacks(threadRunnable);}});}Thread thread = new Thread(new Runnable() {public void run() {// TODO Auto-generated method stubProgressDialog1.show();try {thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}ProgressDialog1.dismiss();}});int i = 0;Runnable threadRunnable = new Runnable() {public void run() {// TODO Auto-generated method stubi++;try {thread.sleep(50);Message msg = new Message();msg.what = i;mhandler.sendMessage(msg); mhandler.post(threadRunnable);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}if (i == 100) {mhandler.removeCallbacks(threadRunnable);}}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
代码题不说了,做了2个例子,真正面试时写出重点就行了,老实说程序员不怎么喜欢在纸上写代码吧(反正我不喜欢)
待会补充。。。。
- Android面试题
- Android 面试题积累
- android的面试题
- Android面试题
- android 面试题
- Android面试题
- android面试题
- Android面试题
- 转 android面试题
- android面试题总结
- android面试题
- Android 面试题1
- android面试题整理
- Android面试题
- Android 面试题积累
- Android面试题
- android面试题
- android面试题整理
- shell测试
- 做为中国人,以下“历史片断”绝对颠覆你的想像!
- Study JQuery《4、事件和动画》
- 判断 iOS 系统版本
- 6410 wince IROM引导SD升级 回忆
- android 面试题
- LoadRunner分析测试结果(转)
- Static关键字的作用
- nefu488餐厅计划问题(最小费用最大流)
- WinCE文件创建修改时间异常
- C++命名规则
- 探究JVM和GC
- 七夕情书之恋恋红尘
- MPI点对点通信函数与通信模式