I have to access global data shared between activities in Android application.
I have simplified DataProvider
class to contain only one field - options
in order to make my question clearer, but in reality it is much complex class.
There is deviation from global singleton pattern here in sense, that global instance
can be replaced at certain point with new set of data in LoadDataActivity
. Activities that have older version of data can retain older version until they are restarted, in which case they will just grab new instance
.
MainActivity is responsible for loading initial data into global DataProvider instance
.
DataProvider.class
public class DataProvider
{
// current global instance
public static DataProvider instance = new DataProvider();
// data
private Map<String, String> options = new HashMap<String, String>();
public Map<String, String> getOptions()
{
return options;
}
public void load(String source)
{
options.clear();
options.put(source, source);
// data loading
}
}
MainActivity
public class MainActivity extends Activity
{
private DataProvider data;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = DataProvider.instance;
data.load("main");
Map<String, String> options = data.getOptions();
// read data from options and perform activity initialization
}
}
ShowDataActivity
public class ShowDataActivity extends Activity
{
private DataProvider data;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
data = DataProvider.instance;
Map<String, String> options = data.getOptions();
// read data from options and perform activity initialization
}
}
LoadDataActivity
public class LoadDataActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
}
public void loadData(String source)
{
DataProvider data = new DataProvider();
data.load(source);
// replace global data instance with new set of data
DataProvider.instance = data;
}
}
Can above code be improved and how?