案例描述:
在MainActivity中去启动ActivityOne,然后点击回撤按钮,这时MainActivity的onRestart就会被调用。
public class MainActivity extends Activity {
private Boolean goFinish;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setClassName("com.example.testactivityonrestart", "com.example.testactivityonrestart.ActivityOne");
startActivityForResult(intent, 2);
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d("ntb", "onRestart");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.d("ntb", "onActivityResult");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
以上是MainActivity,通过startActivityForResult启动,运行后会发现,当回到MainActivity的时候,会先执行onActivityResult,然后在执行onRestart。
public class ActivityOne extends Activity {
private Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Instrumentation ins = new Instrumentation();
ins.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
Log.d("ntb", "run");
}
};
private Thread th = new Thread(runnable);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
th.start();
}
}
这是在ActivityOne中的操作,原先想起一个线程发送一个KeyEvent自动回撤,但是实际运行发行这样行不通,android会报“Dropping event due to no window focus...”,具体为什么,请看android的ViewRootImpl.java中handleImeFinishedEvent方法。
这ActivityOne点击回撤键,然后就会去触发MainActivity的onRestart。