日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android笔记:Activity

發(fā)布時間:2023/12/9 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android笔记:Activity 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.Android可視化界面結(jié)構(gòu):
? ? 一個Android應(yīng)用的可視化界面最底層是Activity,在他之上是一個Window對象,在window之上通常是布局容器,再上面才是用戶直接交互的組件(按鈕,文本框)
交互組件(UI控件)-->布局容器(layout)--->Window對象--->Activity
2.Activity生命周期
? ? Activity是以棧的形式管理的,當(dāng)前活動的Activity位于棧頂,其他的Activity則處于非活動狀態(tài).
? ? ? ?Activiy生命周期中的4個重要狀態(tài)
? ? ? ? ? ??活動 處于棧頂位置,用戶進(jìn)行交互
? ? ? ? ? ? 暫停 可見但失去焦點(diǎn),用戶不能進(jìn)行交互
? ? ? ? ? ? 停止 不可見
? ? ? ? ? ? 銷毀 被系統(tǒng)和進(jìn)程Kill掉
? ? ? ? ?細(xì)分Activity生命周期為3個關(guān)鍵的嵌套子周期:
? ? ? ? ? ? 首尾:第一次調(diào)用onCreate()到最后調(diào)用onDestroy().對應(yīng)的做全局的初始化,以及最后的釋放.
? ? ? ? ? ? 可見但不一定交互:從調(diào)用onStart()到對應(yīng)調(diào)用一次onStop(),用戶可以在屏幕上看到Activity但不一定能與之交互,可以在這期間維護(hù)向用戶顯示的資源.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? onReSart()被停止的Activity重新被啟動.
? ? ? ? ? ?活動周期:從調(diào)用onResume()到對應(yīng)的onPause(),活動的activtiy與用戶進(jìn)行交互
3.控制Activity的生命周期
? ? 用戶很多常見的操作都會引起Activity的暫停,停止,結(jié)束甚至啟動多個程序版本,對于程序而言,這些都應(yīng)該是要盡量避免的.
? ? 3.1強(qiáng)制執(zhí)行單任務(wù)模式:
? ? ? ? 比如當(dāng)程序執(zhí)行跳轉(zhuǎn)操作之后再次的啟動,可能會在手機(jī)上產(chǎn)生多個Activity實例(系統(tǒng)自動Kill多余的實例或者引發(fā)異常).
? ? ? ? 那么我們?yōu)榱吮WC任何時候,每個Activity都只有一個正在運(yùn)行的實例,只需要在AndroidManifest.xml的Activity元素中加入以下代碼:
? ? ? ??android:lauchMode="singleInstance"
? ? ? ? 如果想要限制一個程序中只有一個activity實例,只需要在AndroidManifest.xml的Activity元素中加入以下代碼:
? ? ? ??android:lauchMode="singleTask"
? ?3.2強(qiáng)制手機(jī)屏幕方向
? ? ? ? 手機(jī)屏幕方向改變時,Activity被結(jié)束然后再重新啟動,這樣導(dǎo)致程序丟失了當(dāng)前的狀態(tài).
? ? ? ? 那么有一種方案是禁止切換應(yīng)用程序的視圖(屏幕方向的切換),在AndroidManifest.xml的Activity元素中加入以下代碼:
? ? ? ? android:screenOrientation="portrait"(縱向)或者android:screenOrientation="landscape"(橫向)
??????? 問題還沒有完全解決,以上代碼只是將程序始終保存在指定的方向,并不能防止Activity的重新啟動的一系列操作.
??????? 要實現(xiàn)不重啟,還需要在AndroidManifest.xml中設(shè)置

??????? android:configChanges="orientation|keyboradHidden"(手機(jī)屏幕方向,鍵盤滑出時觸發(fā)),事件為onConfigurationChanged(Configuration newConfig)
?? 3.3保存和恢復(fù)Activity的信息
?????? 手機(jī)屏幕方向改變時,Activity被結(jié)束然后再重新啟動,這樣導(dǎo)致程序丟失了當(dāng)前的狀態(tài).
?????? 我們可以保存當(dāng)前Activity的信息,然后再重啟是恢復(fù)之前的信息
?????? 實現(xiàn)這一想法就是:onSaveInstanceStateonRestoreInstanceState
?????? 原理:當(dāng)一個Activty即將被Kill時,通過重寫onSaveInstanceState來保存需要保存的狀態(tài)的相關(guān)信息,當(dāng)重新創(chuàng)建該Activity后,之前onSaveInstanceState保存的狀態(tài)信息將
通過Bundle傳遞給onCreate方法,然后就可以利用onRestoreInstanceState方法來保存恢復(fù)之前的狀態(tài)信息了.
值得注意一下:
觸發(fā)onSaveInstanceState的幾個操作:(實際Activity銷毀)
1.當(dāng)用戶按下HOME鍵
2.長按HOME
3.按下電源按鍵,屏保狀態(tài)
4.屏幕方向切換(不設(shè)置configChanges)
Note:除了第4種,其他的3種情況,onSaveInstanceState和onRestoreInstanceState不一定是被成對調(diào)用的.

4.Activity的交互
??? 4.1啟動另一個Activity(跳轉(zhuǎn))
??????? 1.定義一個Intent,并為該Intent指定即將被啟動的Activity
???????? Intent newActivityIntent=new Intent(this,NewActivity.class);
??????? 2.調(diào)用Intent的startActivity方法啟動并跳轉(zhuǎn)到新的Activity
???????? startActivity(neActivityIntent);
??????? 3.當(dāng)新的Activity執(zhí)行完畢之后,調(diào)用finish方法結(jié)束當(dāng)前Activity,并將控制權(quán)交回給調(diào)用它的Activity.
???????? finish();
??????? 4.在ActivityManifest.xml中聲明新的Activity(注冊)
??? 4.2啟動另一個Activity并返回結(jié)果
??????? 1.定義一個Intent,并為該Intent指定即將被啟動的Activity
??????? 2.調(diào)用startActivityForResult(Intent intent,int requestCode)跳轉(zhuǎn)并標(biāo)記requestCode
??????? 3.重寫onActivityResult(int requestCode,int resultCode,intent data)解析返回的數(shù)據(jù)
??????? 4.在另一個Activity中調(diào)用setResult(RESULT_OK,backintent)
Note:在Activity之間傳遞數(shù)據(jù)Bundle:一個類型安全的容器,只能存儲基本數(shù)據(jù)類型或基本類型的數(shù)組,如string,int,byte和boolean等

?

?

代碼:

string資源文件:

<?xml version="1.0" encoding="utf-8"?> <resources><string name="app_name">SetupNewActivity</string><string name="hello_world">Hello world!</string><string name="StartActivitiy">這是啟動頁面的Activity</string><string name="NewActivity">啟動新的Activity</string><string name="EndNewActivity">結(jié)束當(dāng)前Activity</string><string name="ShowNewActivity">這是新啟動的Activity界面</string> </resources>

主頁面:activity_lauch.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><TextView android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/StartActivitiy"/><Button android:text="@string/NewActivity"android:id="@+id/SetupNew"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:layout_marginTop="20dp"/> </RelativeLayout>

跳轉(zhuǎn)頁面:activity_new.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/ShowNewActivity"></TextView><Buttonandroid:text="@string/EndNewActivity"android:id="@+id/End"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:layout_marginTop="20dp"></Button> </RelativeLayout>

LauchActivity.java:

package com.YZR.setupnewactivity;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;public class LauchActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_lauch);Button setupButton=(Button)findViewById(R.id.SetupNew);setupButton.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub setupNewActivity();}});}private void setupNewActivity() {// TODO Auto-generated method stubIntent newActivityIntent=new Intent(LauchActivity.this,NewActivity.class);startActivity(newActivityIntent);} }

NewActivity.java

package com.YZR.setupnewactivity;import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;public class NewActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_new);Button endButton=(Button)findViewById(R.id.End);endButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub finish();}});} }

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.YZR.setupnewactivity"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="21" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="LauchActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="NewActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity></application></manifest>

????

下一節(jié)再介紹傳值跳轉(zhuǎn).

?

僅供學(xué)習(xí)之用.

END

<?xml version="1.0" encoding="utf-8"?>
<resources>

??? <string name="app_name">SetupNewActivity</string>
?? ?
??? <string name="hello_world">Hello world!</string>
??? <string name="StartActivitiy">這是啟動頁面的Activity</string>
??? <string name="NewActivity">啟動新的Activity</string>
??? <string name="EndNewActivity">結(jié)束當(dāng)前Activity</string>
??? <string name="ShowNewActivity">這是新啟動的Activity界面</string>
</resources>

轉(zhuǎn)載于:https://www.cnblogs.com/Francis-YZR/p/4892595.html

總結(jié)

以上是生活随笔為你收集整理的Android笔记:Activity的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。