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

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();
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Android Studio制作共享生词本的步骤: 1. 创建一个新的Android项目,在项目结构中选择“Add an Activity”,选择“Empty Activity”并命名为“WordbookProvider”。 2. 在AndroidManifest.xml文件中,添加ContentProvider的声明。在`<application>`标记内添加以下代码: ```xml <provider android:name=".WordbookProvider" android:authorities="com.example.wordbookprovider" android:exported="true" /> ``` 注意,`android:authorities`属性必须设置为你的应用程序的唯一标识符,以确保其他应用程序可以访问你的ContentProvider。 3. 在WordbookProvider.java文件中,实现ContentProvider的抽象方法。在`query()`方法中,你可以使用SQLite数据库或其他数据存储方式来检索生词本数据。以下是一个示例: ```java public class WordbookProvider extends ContentProvider { private DBHelper dbHelper; @Override public boolean onCreate() { dbHelper = new DBHelper(getContext()); return true; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("wordbook", projection, selection, selectionArgs, null, null, sortOrder); return cursor; } // 省略其他方法 } ``` 这里使用了一个叫做DBHelper的类来管理SQLite数据库。你需要在DBHelper类中实现数据库的创建和升级逻辑。 4. 在MainActivity.java文件中,添加一些生词本数据数据库中。以下是一个示例: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 添加生词本数据数据库 WordbookProviderHelper helper = new WordbookProviderHelper(getContentResolver()); helper.insertWord("apple"); helper.insertWord("banana"); helper.insertWord("cherry"); } } ``` 这里使用了一个叫做WordbookProviderHelper的类来简化对ContentProvider的访问。你需要在WordbookProviderHelper类中实现对ContentProvider的基本操作,例如插入数据和查询数据。 5. 最后,在另一个应用程序中,你可以使用ContentResolver来访问你的ContentProvider。以下是一个示例: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 使用ContentResolver查询生词本数据 Cursor cursor = getContentResolver().query(Uri.parse("content://com.example.wordbookprovider/wordbook"), null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { String word = cursor.getString(cursor.getColumnIndex("word")); Log.d("MainActivity", "word: " + word); } cursor.close(); } } } ``` 在这里,我们使用了`getContentResolver()`方法来获取ContentResolver,然后使用`query()`方法来查询生词本数据。请注意,我们使用了与ContentProvider声明中相同的URI来查询数据。 这就是使用Android Studio制作共享生词本的基本步骤。当然,在实际应用中,你需要考虑更多的安全性和可靠性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值