編輯:關於Android編程
引用官方的說法:
是一個應用組件,用戶可與其提供的屏幕進行交互,以執行撥打電話、拍攝照片、發送電子郵件或查看地圖等操作。 每個 Activity 都會獲得一個用於繪制其用戶界面的窗口。窗口通常會充滿屏幕,但也可小於屏幕並浮動在其他窗口之上
要創建Activity 必須繼承自Activity或者Activity的子類。在Activity的各個生命階段實現對應的方法;
其中重要的兩個方法:
onCreate() ,系統在創建Activity時調用此方法;在此方法實現視圖綁定;一些 控件的初始化
onPuase(); 用戶離開當前Activity調用的第一個方法 ,
創建完成後必須在Manifest文件中 聲明此Activity 系統才會知道有這個Activity
... ...
如果有需要也可以為此Activity添加IntentFilter(IntentFilter稍後我會再做總結),以供外部程序來啟動,一般同一應用中不會用到隱式啟動。
最簡單的Activity 只綁定了一個視圖
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
可以通過一個intent 來啟動 一個Activity ,關於intent稍後會做總結
在明確的指導要啟動的Activity的時候可以顯示使用intent來啟動
Intent intent = new Intent(this, SignInActivity.class); startActivity(intent);
如果需要傳遞數據,可以在intent中放入數據
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra("origin", "哈哈"); startActivity(intent);
獲取數據
Intent intent = getIntent();//獲取啟動此activity的intent String origin = intent.getStringExtra("origin");
在不明確要啟動的Activity的時候 可以在intent中添加關於啟動目標的描述和類型,系統會過濾所有的Activity的intentFilter來匹配 ;一般 在同一個應用中不必使用隱式Intent;
例如 我在為A Activity添加這樣的IntentFilter:
要啟動上面的Activity可以這樣寫
Intent in = new Intent(); ////要執行的動作的描述 所有的action中 有一個匹配行 in.setAction("com.skymxc.action.x2"); //附加信息的描述 這裡的描述只要在intentFilter中聲明了就能匹配上, // 如果有一項未聲明則匹配不上,如果intentFilter中沒有可以不添加,會使用默認的category in.addCategory("com.skymxc.catagory.c2"); //對數據進行描述 C中定義了協議為 file in.setDataAndType(Uri.parse("http://"),"audio/13"); if (in.resolveActivity(getPackageManager())!=null){ //啟動 startActivity(in); }else{ Toast.makeText(this,"系統中不存在可以執行此操作的程序",Toast.LENGTH_SHORT).show(); }
如果啟動一個Activit只為獲得某個結果 可以 使用 startActivityForResult() 來啟動一個Activity ,在獲得結果後會回調 方法:onActivityResult();
去圖庫獲取圖片 第二個參數是請求碼 在onActivityResult()中區分結果
Intent intent1 = new Intent(Intent.ACTION_PICK); intent1.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); //為了結果去啟動一個Activity startActivityForResult(intent1,50);
onActivityResult()中獲取到取得的圖片
/** * * @param requestCode 啟動時的 requestCode * @param resultCode 跳轉的activity給的 * @param data 跳轉的activity給的 返回的數據 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode== 50 && resultCode ==RESULT_OK && data != null){ Uri uri = data.getData(); //返回是標識符指定圖片所在的位置的統一資源標識符 img.setImageURI(uri); //設置給 ImageView } }
當用戶 離開Activity去往另一個Activity時;Activity會被壓入返回棧,如果內存不夠就會被銷毀 ,當Activity被銷毀後其中的數據當然就沒了,如果需要保留這些數據可調用 方法 onSaveInstanceState()方法
@Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { //存入數據 outState.putBoolean("checked",true); }
當此Activity被創建時 就能取出數據了
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState!=null){ boolean checked = savedInstanceState.getBoolean("checked"); } setContentView(R.layout.activity_main); }
看一張圖描述了整個Activity由生到死的一套回調方法
先說一下上圖的方法:
- onCreate() :創建Activity ,可以在這裡進行初始一些視圖和數據
- onStart(): 啟動Activity ,這裡你就可以看到 這個activity了
- onResume(): 調用這個方法前 只能看到Activity 並不能進行交互 ,執行完此方法才可以進行交互 ,整個Activity就徹底的運行起來了
- onPause() :停止用戶交互 你可以看到 但是 不能交互了 比如 啟動另一個透明的Dialog Activity 你可以看到原本的Activity ,但是已經失去了焦點 ,無法交互
- onStop() :當前Activity被覆蓋時調用 例如 當前activity1跳往到activity2 ,activity就會把activity1覆蓋,這時就調用了此方法
- onRestart(); 重新啟動
- onDestroy():activity再結束前調用的最後一個方法;這裡可以進行一些釋放資源的操作
完整生命周期:
從調用的第一個方法 onCreate() 到最後調用一個的方法onDestroy() ,在onCreate()方法中可以進行一些全局的配置,UI的引用,數據的初始化,也可以從savedInstanceState中讀取 保存在設備中或者執行reCreate方法前保存的數據等前提savedInstanceSate不為null,在onDestroy()方法中可以 釋放資源等可視周期:在執行onStart()和onStop()之間 在這期間 你可以在屏幕上看到這個Activity但是 不能再前台跟用戶交互 。只能看,可以理解為於禁用狀態
前台周期:在執行onResume() 和 onPause() 之間,在這期間,用戶就可以在前台和activity交互了。
關於這裡提到的intent ,intentFilter 我會在之後總結。
前言研究了一段時間的藍牙使用,發現網上相關的資料比較貧乏,不像其他Android相關資料那麼齊全,基本上大部分資料都是在藍牙聯盟SIG提供的官網https://www.b
在android開發中對圖片處理很是頻繁,其中對圖片的顏色處理就是很常見的一種。我們經常看到一些類似美圖秀秀,美顏相機的app,為什麼那麼黑的人拍出來是確實那麼地白呢?長
前言:關於使用ViewPageIndicator和ViewPager實現Tab導航,在開發社區裡已經有一堆的博客對其進行了介紹,如果我還在這裡寫如何去實現,那簡直就是老生
介紹介紹了職責鏈模式,作為理解View事件分發機制的基礎。套用職責鏈模式的結構分析,當我們的手指在屏幕上點擊或者滑動,就是一個事件,每個顯示在屏幕上的View或者View