如何android多Activity间共享数据 (extends Application)

来源:互联网 发布:三菱plc伺服编程实例 编辑:程序博客网 时间:2024/05/21 19:31

1,如何共享Activity中的数据

首先你如果想在整个应用中使用某个数据,在java中一般是使用静态变量的方式,而在android中有个更优雅的方式是使用Application context。

每个Activity 都是Context,其包含了其运行时的一些状态,android保证了其是single instance的。

方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。

2,举例

package com.pili.pldroid.streaming.camera.demo;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.util.Log;import com.pili.pldroid.streaming.CameraStreamingManager;import com.pili.pldroid.streaming.CameraStreamingManager.EncodingType;import com.pili.pldroid.streaming.WatermarkSetting;import com.pili.pldroid.streaming.widget.AspectFrameLayout;/** * Created by jerikc on 15/10/29. */public class SWCodecCameraStreamingActivity extends StreamingBaseActivity {    private static final String TAG = "SWCodecCameraStreaming";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        AspectFrameLayout afl = (AspectFrameLayout) findViewById(R.id.cameraPreview_afl);        afl.setShowMode(AspectFrameLayout.SHOW_MODE.REAL);        CameraPreviewFrameView cameraPreviewFrameView =                (CameraPreviewFrameView) findViewById(R.id.cameraPreview_surfaceView);        cameraPreviewFrameView.setListener(this);        WatermarkSetting watermarksetting = new WatermarkSetting(this, R.drawable.qiniu_logo, WatermarkSetting.WATERMARK_LOCATION.SOUTH_WEST, WatermarkSetting.WATERMARK_SIZE.MEDIUM, 100);        mCameraStreamingManager = new CameraStreamingManager(this, afl, cameraPreviewFrameView,                EncodingType.SW_VIDEO_WITH_SW_AUDIO_CODEC); // sw codec        mCameraStreamingManager.prepare(mCameraStreamingSetting, mMicrophoneStreamingSetting, watermarksetting, mProfile);        mCameraStreamingManager.setStreamingStateListener(this);        mCameraStreamingManager.setSurfaceTextureCallback(this);        mCameraStreamingManager.setStreamingSessionListener(this);        mCameraStreamingManager.setStreamStatusCallback(this);        // update the StreamingProfile        setFocusAreaIndicator();    }}

这个效果就是使用静态变量是一样的,但是其更符合android的架构体系。
注意APP必须在manifest注册(

  <application        android:allowBackup="true"        android:name=".StreamingApplication" //此处即是        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

当你创建一个空白页的时候,同样的情况

class SWCameraStreamingActivity extends Activity

这个句式去集成了父类的情况

随后就可以复写方法进行实现了

    @Override    protected void onResume()    {        super.onResume();        mCameraStreamingManager.resume();    }    @Override    protected void onPause(){        super.onPause();        mCameraStreamingManager.pause();    }
1 0
原创粉丝点击