一、選擇題
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 給出一個函數輸出一個字符串的所有排列