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个例子,真正面试时写出重点就行了,老实说程序员不怎么喜欢在纸上写代码吧(反正我不喜欢)

待会补充。。。。



原创粉丝点击