導航:首頁 > 操作系統 > android多activity

android多activity

發布時間:2022-12-11 04:53:05

A. 如何android多Activity間共享數據

方法1:在某個Activity中聲明一個公共的static變數把共享數據作為靜態變數 1 2 3 4 5 6 7 8 9 10 public class OneActivity extends Activity { public static Data data = null;//聲明的變數 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); data = new Data(); } } public class TwoActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Data data = OneActivity.data; } 但是這樣會增加activity之間的耦合度,不是很好 方法二:把共享數據作為放在Applicaiton中 定義一個MyApplication繼承於Application public class MyApplication extends Application{ private Data data; @Override public void onCreate() { super.onCreate(); data = new Data(); } public Data getData(){ return data; } public void setData(Data data){ this.data = data; } } 將MyApplication配置到清單文件中作為程序啟動的ApplicationContext 設置Application的name屬性即可 在Activity中獲取數據 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyApplication application = (MyApplication) getApplication(); Data data = application.getData(); } }

B. 如何android多Activity間共享數據

其實有如下5種方式:
1.基於消息的通信機制 Intent ---boudle ,extra
數據類型有限,比如遇到不可序列化的數據Bitmap,InputStream, 或者LinkList鏈表等等數據類型就不太好用。
2. 利用static靜態數據,public static成員變數;
3.基於外部存儲的傳輸, File/Preference/ Sqlite ,如果要針對第三方應用需要Content Provider

4.基於IPC的通信機制context 與Service之間的傳輸,如Activity與Service之間的通信,定義AIDL介面文件。
5. 基於Application Context
這裡面我覺得第五種方法更具普適性,在網上找了篇講解得好的文章,原文如下:

在Android中使用Intent在兩個Activity間傳遞數據時,只能是基本類型數據,或者是序列化對象。Intent是一種基於消息的進程內和進程間通信模型,當我們需要在我們應用程序內部,多個Activity間進行復雜數據對象共享交互時,使用Intent就顯得很不方便。此時,我們就需要一種數據共享的機制來實現。當然,直接使用java語言中的靜態變數是可以的,但在Android中有更為優雅的實現方式。

The more general problem you are encountering is how to save stateacross several Activities and all parts of your application. A staticvariable (for instance, a singleton) is a common Java way of achievingthis. I have found however, that a more elegant way in Android is toassociate your state with the Application context.

--如想在整個應用中使用,在java中一般是使用靜態變數,而在android中有個更優雅的方式是使用Application context。

As you know, each Activity is also a Context, which is informationabout its execution environment in the broadest sense. Your applicationalso has a context, and Android guarantees that it will exist as asingle instance across your application.

--每個Activity 都是Context,其包含了其運行時的一些狀態,android保證了其是single instance的。

The way to do this is to create your own subclass of android.app.Application,and then specify that class in the application tag in your manifest.Now Android will automatically create an instance of that class andmake it available for your entire application. You can access it fromany context using the Context.getApplicationContext() method (Activityalso provides a method getApplication() which has the exact sameeffect):

--方法是創建一個屬於你自己的android.app.Application的子類,然後在manifest中申明一下這個類,這是android就為此建立一個全局可用的實例,你可以在其他任何地方使用Context.getApplicationContext()方法獲取這個實例,進而獲取其中的狀態(變數)。

class MyApp extends Application { private String myState; public String getState(){ return myState; } public void setState(String s){ myState = s; } } class Blah extends Activity { @Override public void onCreate(Bundle b){ ... MyApp appState = ((MyApp)getApplicationContext()); String state = appState.getState(); ... } }

對於Application的生命周期,今天測試了一下,Application類型在該APP被install的時候就已經實例化了,並且onCreate也已經被調用了。
如果需要創建類型裡面可能需要用到的對象的話,就可以在構造函數裡面實現,但是如果需要將該類型bind Service或者registerReceiver等操作時,需要將這些操作放到onCreate中,否則會拋出異常。其原因主要是這個對象還沒有創建完成,此時你用這個對象來bindservice必然會出現意想不到的情況,所以在使用時還需要注意。

C. 如何android多Activity間共享數據

1、在某個Activity中聲明一個公共的static變數把共享數據作為靜態變數,但是這樣會增加activity之間的耦合度,不是很好。
2、把共享數據作為放在Applicaiton中。定義一個MyApplication繼承於Application,將MyApplication配置到清單文件中作為程序啟動的ApplicationContext,設置Application的name屬性即可。

D. 如何android多Activity間共享數據

方法1:在某個Activity中聲明一個公共的static變數把共享數據作為靜態變數

1
2
3
4
5
6
7
8
9
10

public class OneActivity extends Activity {
public static Data data = null;//聲明的變數

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
data = new Data();
}
}

1
2
3
4
5
6
7

public class TwoActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Data data = OneActivity.data;
}

但是這樣會增加activity之間的耦合度,不是很好
方法二:把共享數據作為放在Applicaiton中

E. 如何android多Activity間共享數據

通過Application Context進行變數共享 首先,建立一個繼承自Application的類,將要共享的變數在其中聲明: 代碼: import android.app.Application; public class ApplicationTrans extends Application { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } } 注意:需要注意的是,寫完這個類之後需要在AndroidManifest.xml中在Application節點中進行設置 <application android:name=".ApplicationTrans"//必須設置 android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".TwoActivityShareDataActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" > </activity> </application> 接下來在MainActivity中進行操作: ((ApplicationTrans) getApplication()).setValue("我是通過Application傳遞的值");//賦值操作 在第二個Activity中獲得該值:就行用這個值進行操作了 ((ApplicationTrans) getApplication()).getValue();

F. 如何android多Activity間共享數據

在Application裡面加個靜態列表, 把多個activity界面的數據放到裡面就可以了.

G. 如何android多Activity間共享數據

通過Application Context進行變數共享
首先,建立一個繼承自Application的類,將要共享的變數在其中聲明:
代碼:

import android.app.Application;

public class ApplicationTrans extends Application {
private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

}

注意:需要注意的是,寫完這個類之後需要在AndroidManifest.xml中在Application節點中進行設置

<application
android:name=".ApplicationTrans"//必須設置
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".TwoActivityShareDataActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" >
</activity>
</application>

接下來在MainActivity中進行操作:
((ApplicationTrans) getApplication()).setValue("我是通過Application傳遞的值");//賦值操作

在第二個Activity中獲得該值:就行用這個值進行操作了
((ApplicationTrans) getApplication()).getValue();

H. Android 多個Activity 共用一個socket

想要讓多個activity共用一個socket(本文使用bluetoothsocket,TCP通信其實也是一樣的,只是socket引入的庫不同而已),網上三個方法,這里只是實現了比較簡單的一種(application實體類)。

第一步實現socket實體類:

第二步:設置AndroidManifest.xml

加入android:name=".Mysocket"

第三步:在第一次創建鏈接時對它初始化:

因為我是藍牙與51單片機進行通信,初始化bluetoothsocket後,再使用((Mysocket)getApplication()).setSocket(socket8051);這句話初始化實體類。

第四步:在其他的activity調用這個socket可以使用

不出意外可以正常運行。

實體類

`hello`

I. 如何android多Activity間共享數據

共享數據應該從整個框架設計上開始修改而不是專注從功能實現的角度上出發

1.製作一個獨立的靜態類,用於存儲數據(詳細參考單例模式)

2.Activity本身並不再保存相關數

3.Activity通過靜態類獲取數據的引用並顯示相關內容


另外可能出現的問題

  1. 當多個Activity間需要傳遞參數時,可以通過EventBus進行傳遞

  2. 當數據改變時 發出改變消息,各Activity均是通過監聽消息改變更新界面(詳細可網路觀察者模式)


詳細框架設計可以參考一些很傳統的框架,比如mvc之類的框架,相關文檔具體可以在網路里查詢

閱讀全文

與android多activity相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:755
蘋果郵件無法連接伺服器地址 瀏覽:958
phpffmpeg轉碼 瀏覽:669
長沙好玩的解壓項目 瀏覽:140
專屬學情分析報告是什麼app 瀏覽:562
php工程部署 瀏覽:831
android全屏透明 瀏覽:730
阿里雲伺服器已開通怎麼辦 瀏覽:801
光遇為什麼登錄時伺服器已滿 瀏覽:300
PDF分析 瀏覽:483
h3c光纖全工半全工設置命令 瀏覽:141
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:777
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:148
伊克塞爾文檔怎麼進行加密 瀏覽:889
app轉賬是什麼 瀏覽:163