編輯:關於Android編程
1. 什麼是Activity?
四大組件之一,一般的,一個用戶交互界面對應一個activity
setContentView() ,// 要顯示的布局
, activity 是Context的子類,同時實現了window.callback和keyevent.callback, 可以處理與窗體用戶交互的事件.
button.setOnclickLinstener{
}
我開發常用的的有ListActivity , PreferenceActivity ,TabAcitivty等…
如果界面有共同的特點或者功能的時候,還會自己定義一個BaseActivity.
進度對話框的顯示與銷毀doubanservice
2. 請描述一下Activity 生命周期。
生命周期描述的是一個類 從創建(new出來)到死亡(垃圾回收)的過程中會執行的方法..
在這個過程中 會針對不同的生命階段會調用不同的方法
Activity從創建到銷毀有多種狀態,從一種狀態到另一種狀態時會激發相應的回調方法,這些回調方法包括:oncreate ondestroy onstop onstart onresume onpause
其實這些方法都是兩兩對應的,onCreate創建與onDestroy銷毀;
onStart可見與onStop不可見;onResume可編輯(即焦點)與onPause;
對話框的彈出, Activity.this
對話框是activity的一部分.
這6個方法是相對應的,那麼就只剩下一個onRestart方法了,這個方法在什麼時候調用呢?
答案就是:在Activity被onStop後,但是沒有被onDestroy,在再次啟動此Activity時就調用onRestart(而不再調用onCreate)方法;
如果被onDestroy了,則是調用onCreate方法。
最後講自己項目中的經驗,比如說豆瓣客戶端每次進入某個界面的時候都要看到最新的數據,這個刷新列表的操作 就放在onStart()的方法裡面.
fillData() 這樣保證每次用戶看到的數據都是最新的.
多媒體播放, 播放來電話. onStop() 視頻, 視頻聲音設置為0 , 記錄視頻播放的位置 mediaplayer.pause();
onStart() 根據保存的狀態恢復現場.mediaplayer.start();
在讀文檔的時候 還發現 activity還有兩個方法onPostResume() 和 OnPostCreate()這兩個生命周期的方法,不過開發的時候沒有用到過.
3. 兩個Activity之間跳轉時必然會執行的是哪幾個方法。
一般情況比如說有兩個activity,分別叫A,B,當在A裡面激活B組件的時候, A 會調用 onPause()方法,然後B 調用onCreate() ,onStart(), OnResume() ,
這個時候B覆蓋了窗體, A會調用onStop()方法. 如果B呢是個透明的,或者是對話框的樣式, 就不會調用onStop()方法
4. 橫豎屏切換時候Activity的生命周期。
這個生命周期跟清單文件裡的配置有關系
1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期
默認首先銷毀當前activity,然後重新加載
Onpause onstop ondestory oncreate onstart onresume
2、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法
游戲開發中, 屏幕的朝向都是寫死的.
5. 如何將一個Activity設置成窗口的樣式。
可以自定義一個activity的樣式,詳細見手機衛士的程序詳細信息
android:theme="@style/FloatActivity"
E:\day9\mobilesafe\res\values\style
6. 你後台的Activity被系統 回收怎麼辦?如果後台的Activity由於某原因被系統回收可了,如何在被系統回收之前保存當前狀態?
除了在棧頂的activity,其他的activity都有可能在內存不足的時候被系統回收,一個activity越處於棧底,被回收的可能性越大.
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong("id",1234567890);
}
public void onCreate(Bundle savedInstanceState) {
//判斷savedInstanceState是不是空.
//如果不為空就取出來
super.onCreate(savedInstanceState);
}
7. 如何退出Activity?如何安全退出已調用多個Activity的Application?
退出activity 直接調用 finish () 方法 . //用戶點擊back鍵 就是退出一個activity
退出activity 會執行 onDestroy()方法 .
1、拋異常強制退出:
該方法通過拋異常,使程序Force Close。
驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。
//安全結束進程 android.os.Process.killProcess(android.os.Process.myPid());
2、記錄打開的Activity:
每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
Listlists ; 在application 全集的環境裡面
lists =new ArrayList();
每一個activity在執行oncreate()方法的時候 lists.add(this);
Ondestory() lists.remove(this);
lists.add(activity);
for(Activity activity: lists)
{
activity.finish();
}
3、發送特定廣播:
在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後,關閉即可。
//給某個activity 注冊接受接受廣播的意圖
registerReceiver(receiver,filter)
//如果過接受到的是 關閉activity的廣播 就調用finish()方法把當前的activity finish()掉
4、遞歸退出
在打開新的Activity時使用startActivityForResult,然後自己加標志,在onActivityResult中處理,遞歸關閉。
404 退出程序
OnActivityResult();
講一講你對activity的理解
把上面的幾點用自己的心得寫出來
8. service是否在main thread中執行,service裡面是否能執行耗時的操作?
默認情況,如果沒有顯示的指定service所運行的進程, Service和activity是運行在當前app所在進程的main thread(UI主線程)裡面
service裡面不能執行耗時的操作(網絡請求,拷貝數據庫,大文件 )
在子線程中執行 new Thread(){}.start();
特殊情況 ,可以在清單文件配置 service 執行所在的進程 ,
讓service在另外的進程中執行
9. 兩個Activity之間怎麼傳遞數據?
基本數據類型可以通過.Intent 傳遞數據
extras.putDouble(key, value)
intent.putExtra(name,value)
// 通過intentputExtra 方法基本數據類型都傳遞
Bundlebundle = new Bundle();
bundle.putShort(key,value);
intent.putExtras(bundle);
intent.putExtras(bundle)
獲取到激活他的 getIntent();
Intent intent = getIntent();
Bundle bundle= intent.getExtras();
Bundle 類似map的集合
intent.getStringExtra("key","value");
intent.getBooleanExtra("key","value")
Application 全局裡面存放 對象 ,自己去實現自己的application的這個類,基礎系統的application , 每個activity都可以取到
讓對象實現 implementsSerializable接口把對象存放到文件上.
讓類實現Serializable接口,然後可以通過 ObjectOutputStream //對象輸出流
File file = newFile("c:\\1.obj");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = newObjectOutputStream(fos);
Student stu = newStudent();
stu.setId("10001");
stu.setName("zs");
oos.writeObject(stu);
FileInputStream fis = newFileInputStream(file);
ObjectInputStream ois = newObjectInputStream(fis);
Student stu1 =(Student) ois.readObject();
System.out.println(stu1.getName());
Parcelable 和Serializable
Parcelable 把對象序列化到android操作系統的一塊公用的內存空間
文件/網絡
//傳遞數據的引用
intent.setData(Uri)
Uri.fromFile(); //大圖片的傳遞
contentResolver.getInputStream(uri);
10. 怎麼讓在啟動一個Activity是就啟動一個service?
在activity的onCreate()方法裡面 startService();
說到工程模式,好多非技術流的玩家都很頭疼。手機工程模式給人的印象就是生硬的黑白屏,全屏的英文和代碼命令,就像視窗重新回到了DOS系統,雖然好奇但又怕手機變磚
代碼下載地址已經更新。因為代碼很久沒更新,已經很落伍了,建議大家使用RecyclerView實現。參考項目:https://github.com/bingoogolapp
原理最近用socket寫了一個消息推送的demo,在這裡和大家分享一下。主要實現了:一台手機向另外一台手機發送消息,這兩台手機可以隨時自由發送文本消息進行通信,類似我們常
推薦閱讀:先給大家分享一下,側滑刪除,布局也就是前面一個item,然後有兩個隱藏的按鈕(TextView也可以),然後我們可以向左側滑動,然後顯示出來,然後對delete