If you want your UI thread to remain active, you need to put this in a separate thread with something like an AsyncTask so that your sleep doesn't freeze your UI. Something like
private class MyAsyncTask extends AsyncTask<Integer param, Void, Void>{
private int time = 0;
@Override
protected Void doInBackground(Integer...time){
this.time = time[0];
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void result){
createButton(time-1);
}
}
Then do something like this in your activity
private MyAsyncTask task;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
int time;
// Some methodology to get the desired time
createButton(time);
new MyAsyncTask().execute(time -1);
}
With your method changed to
public void createButton(int time) {
Random r = new Random();
int i1 = r.nextInt(300);
int i2 = r.nextInt(300);
Button myButton = new Button(this);
myButton.setText("Push Me");
RelativeLayout ll = (RelativeLayout)findViewById(R.id.rela);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(50, 50);
lp.setMargins(i1,i2,0,0);
myButton.setLayoutParams(lp);
ll.addView(myButton);
if(time == 0)
return;
else
new MyAsynCTask().execute(time);
}