Android学习33

1、 请写出下列代码的输出内容

Int main(void){

 Int  a,b,c,d;

 A=10;

  B=a++;  

  C=++a;  

  D=10*a++;  

Print(“a,b,c,d:%d,%d,%d,%d”,a,b,c,d);

Return 0;

}

答案

13 10 12 120

 

2、 写出下面程序输出结果

 

Void test(int a){

If(a>0){

Test(a-1);

}

System.out.print(a);

}

 

Test(4);

答案 01234

 

3、 ListMapSet三个接口,存取元素时各有什么优缺点?

 

有序否

允许元素重复否

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉树排序)

Map

AbstractMap

使用key-value来映射和存储数据,Key必须惟一,value可以重复

HashMap

TreeMap

是(用二叉树排序)

窗体底端

 

4、 请阐述一下AndroidActivity的生命周期

5、 Android提供哪几种数据持久化方式,分别是什么?

http://www.cnblogs.com/ITtangtang/p/3920916.html#type5

1使用SharedPreferences存储数据

适用范围保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名

2文件存储数据

核心原理: Context提供了两个方法来打开数据文件里的文件IOFileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。

读写sdcard上的文件

其中读写步骤按如下进行:

1、调用EnvironmentgetExternalStorageState()方法判断手机上是否插了sd,且应用程序具有读写SD卡的权限,如下代码将返回true

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录

3、使用IO流操作SD卡上的文件 

3SQLite存储数据

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。

4ContentProvider

     管理android以结构化方式存放的数据,以相对安全的方式封装数据(表)并且提供简易的处理机制和统一的访问接口供其他程序调用。

5网络存储数据

HttpUrlConnectionJava.NET包中提供的APIHttpUrlConnection这种最原始最基本的API,其实大多数开源的联网框架基本上也是基于JDKHttpUrlConnection进行的封装罢了

 

6、 请说说对Android线程的理解

android遵守的就是单线程模型一个应用对应一个主线程,在单线程的模型下,一些耗时的操作就要交给其它子线程去执行。

尽管你可以把你的应用程序限制于一个单独的进程中,有时,你仍然需要衍生出一个线程以处理后台任务。因为用户界面必须非常及时的对用户操作做出响应,所以,控管activity的线程不应用于处理一些诸如网络下载之类的耗时操作。所有不能在瞬间完成的任务都应安排到不同的线程中去。线程在代码中是以标准Java Thread对象创建的。Android提供了很多便于管理线程的类:Looper用于在一个线程中运行一个消息循环,Handler用于处理消息,HandlerThread 用于使用一个消息循环启用一个线程。

7、 Android应用容易发生ANR错误,请简述几种避免ANR错误的办法?

 ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。

默认情况下,android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

避免方法:

1、运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)

 

2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点)

 

3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。

 

8、 选下面任何一题编写程序,编程语言自选

编写一个二分查找算法

1.  public static int binarySearch(Integer[]srcArray,int des){  

2.         //第一个位置.  

3.         int low=0;  

4.         //最高位置.数组长度-1,因为下标是从0开始的.  

5.         int high=srcArray.length-1;  

6.         //low"指针"high不重复的时候.  

7.         while(low<=high){  

8.             //中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2  

9.             int middle=low+((high-low)>>1);  

10.         //与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标.  

11.         if(des==srcArray[middle]){  

12.             return middle;  

13.         //如果小于的话则移动最高层的"指针"  

14.         }else if(des<srcArray[middle]){  

15.             high=middle-1;  

16.         //移动最低的"指针"   

17.         }else{  

18.             low=middle+1;  

19.             }  

20.         }  

21.         return-1;  

22.         }  

23.       

24. }  

25. 递归二分查找算法

26. int BinSearch(int Array[],int low,int high,int key)  

27. {  

28.     if (low<=high)  

29.     {  

30.         int mid = (low+high)/2;  

31.         if(key == Array[mid])  

32.             return mid;  

33.         else if(key<Array[mid])  

34.             //移动lowhigh  

35.             return BinSearch(Array,low,mid-1,key);  

36.         else if(key>Array[mid])  

37.             return BinSearch(Array,mid+1,high,key);  

38.     }  

39.     else  

40.         return -1;  

41. }  

 

 

编写任何一种排序算法

http://www.codeceo.com/article/10-sort-algorithm-interview.html

9、 有一串字符串如下text=“深圳市dsafdaf”,编写程序统计每个字符出现的频率。

public class CharNumber {

Set<Character> charSet = new HashSet<Character>();

Map<Character,Integer> charMap = new HashMap<Character,Integer>();

public static void main(String[] args) {

CharNumber c = new CharNumber();

String a="abcdea";

c.show(a);

}

public void find(String tofind){

for(int i=0;i<tofind.length();i++){

if(i==0){

char temp = tofind.charAt(i);

charSet.add(temp);

charMap.put(temp, 1);

}

else{

char temp = tofind.charAt(i);

int flag =0;

for(char a :charSet){

if(a==temp){

int num= charMap.get(temp);

charMap.remove(temp);

charMap.put(temp, num+1);

flag=1;

}

}

if(flag==0){

charSet.add(temp);

charMap.put(temp, 1);

}

}

}

}

public void show(String tofind){

find(tofind);

for(char a:charMap.keySet()){

System.out.println(a+"的出现次数是"+charMap.get(a));

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值