Android Intent 单例模式传参
单例模式的特点就是可以保证系统中一个类有且只有一个实例
这样很容易就能实现,在 A 中设置参数,在 B 中直接访问了
这是几种方法中效率最高的
范例
我们用一个 报数 的 demo 来演示下单例模式传参
-
创建一个 空的 Android 项目
cn.twle.android.SingletonIntent
-
修改
activity_main.xml
添加一个<Button>
和 一个<TextView>
<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/cnt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="0" /> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="小明,你报数" /> </LinearLayout>
-
在
MainActivity.java
目录下新建一个单例类用于传递参数MsDataSingleton.java
package cn.twle.android.singletonintent; import java.util.HashMap; public class MsDataSingleton { //单例模式实例 private static MsDataSingleton instance = null; //synchronized 用于线程安全,防止多线程同时创建实例 public synchronized static MsDataSingleton getInstance(){ if(instance == null){ instance = new MsDataSingleton (); } return instance; } final HashMap<String, Object> mMap; private MsDataSingleton() { mMap = new HashMap<String,Object>(); } public void put(String key,Object value){ mMap.put(key,value); } public Object get(String key) { return mMap.get(key); } }
-
修改
MainActivity.java
package cn.twle.android.singletonintent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.content.Intent; import android.content.Context; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Context mContext = MainActivity.this; TextView tv_cnt = (TextView) findViewById(R.id.cnt); Button btn = (Button) findViewById(R.id.btn); // 获取单例实例 MsDataSingleton mData = MsDataSingleton.getInstance(); int cnt = 0; Object v = null; int type = 0; //读取数据 v = mData.get("cnt"); if ( v != null ) { cnt = (int)v; cnt++; } else { cnt = 0; } tv_cnt.setText(String.valueOf(cnt)); // 读取其它数据 v = mData.get("type"); type = ( v != null) ? (int)v : 0; if (type == 1 ) { btn.setText("小红,轮到你了"); type = 0; } else { btn.setText("小明,你报数"); type = 1; } mData.put("type",type); mData.put("cnt",cnt); btn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent it = new Intent(mContext,MainActivity.class); startActivity(it); } }); } }