日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android笔记:Activity

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

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

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

4.Activity的交互
??? 4.1啟動另一個Activity(跳轉)
??????? 1.定義一個Intent,并為該Intent指定即將被啟動的Activity
???????? Intent newActivityIntent=new Intent(this,NewActivity.class);
??????? 2.調用Intent的startActivity方法啟動并跳轉到新的Activity
???????? startActivity(neActivityIntent);
??????? 3.當新的Activity執(zhí)行完畢之后,調用finish方法結束當前Activity,并將控制權交回給調用它的Activity.
???????? finish();
??????? 4.在ActivityManifest.xml中聲明新的Activity(注冊)
??? 4.2啟動另一個Activity并返回結果
??????? 1.定義一個Intent,并為該Intent指定即將被啟動的Activity
??????? 2.調用startActivityForResult(Intent intent,int requestCode)跳轉并標記requestCode
??????? 3.重寫onActivityResult(int requestCode,int resultCode,intent data)解析返回的數(shù)據(jù)
??????? 4.在另一個Activity中調用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">結束當前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>

跳轉頁面: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é)再介紹傳值跳轉.

?

僅供學習之用.

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">結束當前Activity</string>
??? <string name="ShowNewActivity">這是新啟動的Activity界面</string>
</resources>

轉載于:https://www.cnblogs.com/Francis-YZR/p/4892595.html

總結

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

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