Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

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?

share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.