安卓入门系列-08四大组件之Activity
生活随笔
收集整理的這篇文章主要介紹了
安卓入门系列-08四大组件之Activity
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Activity詳解
- 什么是Activity
- Android提供的四大組件(activity、service、contentprovider、broadcast receiver)之一。它是一個(gè)界面的載體(內(nèi)含各種控件),不妨理解為web開(kāi)發(fā)中的html文件(含各種標(biāo)簽)。當(dāng)然,Activity遠(yuǎn)遠(yuǎn)沒(méi)有這么簡(jiǎn)單,不妨看一下源代碼。作為一個(gè)繼承的類(lèi),它的源碼達(dá)到了7000行,這是由于Activity封裝了很多方法給開(kāi)發(fā)者使用。當(dāng)然,初學(xué)者不需要知道這些底層的東西。
- Activity的生命周期
- 這是官方參考文檔里的圖。
- 不難看出,當(dāng)這個(gè)activity第一次創(chuàng)建出現(xiàn)時(shí)是oncreate方法調(diào)用了,直到這個(gè)Activity被銷(xiāo)毀。當(dāng)然,我們一般大量的刷新類(lèi)型的業(yè)務(wù)處理是放在onresume這個(gè)方法實(shí)現(xiàn)。(因?yàn)閏reate只會(huì)在activity創(chuàng)建時(shí)調(diào)用一次,除非銷(xiāo)毀才會(huì)再次調(diào)用,這是開(kāi)銷(xiāo)比較大的,一般不這么做)
- 這是官方參考文檔里的圖。
- 下面代碼嘗試調(diào)用所有的方法,明確生命周期。
- 代碼測(cè)試
- package com.zc.helloworld;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.Button;public class MainActivity extends AppCompatActivity {private Button btn;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.e("info","MainActivity onCreate()");}@Overrideprotected void onStart() {super.onStart();Log.e("info","MainActivity onStart()");}@Overrideprotected void onResume() {super.onResume();Log.e("info","MainActivity onResume()");}@Overrideprotected void onPause() {super.onPause();Log.e("info", "MainActivity onPause()");}@Overrideprotected void onStop() {super.onStop();Log.e("info", "MainActivity onStop()");}@Overrideprotected void onDestroy() {super.onDestroy();Log.e("info","MainActivity onDestroy()");}@Overrideprotected void onRestart() {super.onRestart();Log.e("info","MainActivity onRestart()");}}
- 演示結(jié)果
- 當(dāng)初次打開(kāi)App時(shí)
- 當(dāng)home鍵最小化App時(shí)
- 當(dāng)回到未被后臺(tái)銷(xiāo)毀的APP時(shí)
- 當(dāng)退出且關(guān)閉App時(shí)
- 從上面的情況,不難看出生命周期的運(yùn)轉(zhuǎn)過(guò)程。
- 代碼測(cè)試
- 常用的Activity
- 在開(kāi)發(fā)中,不可避免要寫(xiě)很多的Activity,但是為了方便,谷歌已經(jīng)封裝了很多實(shí)用的牽涉底層的Activity。
- 代碼測(cè)試
- package com.zc.helloworld;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity {private Button btn1,btn2,btn3,btn4;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button) findViewById(R.id.btn1);btn2 = (Button) findViewById(R.id.btn2);btn3 = (Button) findViewById(R.id.btn3);btn4 = (Button) findViewById(R.id.btn4);context = this;btn1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);}});btn2.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction(Intent.ACTION_GET_CONTENT);intent.setType("image/*");startActivity(intent);}});btn3.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT,"Hello World!");startActivity(intent);}});btn4.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setData(Uri.parse("tel:10086"));startActivity(intent);}});}}
- 演示結(jié)果
- Activity之間的數(shù)據(jù)交互
- 一般用intent傳遞。(內(nèi)存數(shù)據(jù))
- 代碼測(cè)試
- MainActivity.java(將這個(gè)Activity的textview數(shù)據(jù)傳到下一個(gè)Activity)
- package com.zc.helloworld;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends AppCompatActivity {private Button btn1;private TextView tv;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = this;btn1 = (Button) findViewById(R.id.btn1);tv = (TextView) findViewById(R.id.tv1);btn1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent(context,Main2Activity.class);String data = (String) tv.getText();intent.putExtra("data",data);startActivity(intent);}});}}
- MainActivity2.java
- package com.zc.helloworld;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class Main2Activity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);tv = (TextView) findViewById(R.id.tv2);Intent intent = getIntent();if(intent!=null){String data = intent.getStringExtra("data");tv.setText(data);}}}
- MainActivity.java(將這個(gè)Activity的textview數(shù)據(jù)傳到下一個(gè)Activity)
- 演示結(jié)果
- 當(dāng)然,更多類(lèi)型,更加復(fù)雜的數(shù)據(jù)可以用Bundle綁定一起傳遞。
- 補(bǔ)充說(shuō)明
- 實(shí)際開(kāi)發(fā)中必須要處理好Activity和Context的關(guān)聯(lián)。
總結(jié)
以上是生活随笔為你收集整理的安卓入门系列-08四大组件之Activity的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓入门系列-07常用UI控件(长文)
- 下一篇: 安卓入门系列-09一个实战小项目(备忘录