There is this pattern commonly used with Fragments which is having a public static Fragment newInstance() method to instantiate them. The reason behind this is, since Fragments must (or at least are recommended to) have an empty constructor, to pass your arguments through this method via a Bundle to the Fragment. What I really like about this method is that you don't have to expose all your constants and make them public since you pass the arguments inside the class in newInstance(restaurantId) and read them in onCreate().

You can use this pattern for your Activities as well. Let's demonstrate this with an exmaple. Here's the common way Activities get started:

Intent i = new Intent(this, RestaurantActivity.class);  
i.putExtra(RestaurantActivity.EXTRA_RESTAURANT_ID, restaurantId);  
startActivity(i);  

There are two disadvantages with this. First, you have to assemble the Intent everywhere you need the Activity and second the user (caller) of the Activity has to know what data it requires to work properly. Here's the code using the newInstance() pattern.

public class RestaurantActivity extends Activity {

    private static final String EXTRA_RESTAURANT_ID = "restaurantId";

    public static Intent createIntent(Context context, String restaurantId) {
        Intent i = new Intent(context, RestaurantActivity.class);
        i.putExtra(RestaurantActivity.EXTRA_RESTAURANT_ID, restaurantId);
        return i;
    }
}

// somewhere else
startActivity(RestaurantActivity.createIntent(this, "123"));  

This way everything stays encapsulated in the Activity and just the Activity itself defines what data isrequired.