我有一个长时间运行的操作。在线程内部,我开始像这样的新活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
startActivity(new Intent(MainActivity.this,MainActivity.class));
}
});
}
}).start();
}
问题是当我运行另一个应用程序并且线程完成时,该活动显示在屏幕顶部。如何强迫这项活动不要出现在顶层?
答案 0 :(得分:0)
这是因为您将“上下文”从“其他应用程序”中删除。您应该传入应用程序上下文而不是本地活动的上下文。使用context.getApplicationContext()并将其保存在局部变量中,然后使用此上下文启动活动
代码应该是这样的:
@Override
protected void onPostExecute(List<VideoDataDescription> result) {
super.onPostExecute(result);
MainActivity.progressDialog.dismiss();
context.startActivity(new Intent(context, MainActivity.class));
}
}
你会这样称呼它: new MyTask(context).execute();
答案 1 :(得分:0)
你可以像下面这样使用..
Handler splashHandler;
splashHandler = new Handler();
splashHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent loginIntent = new Intent(Splash.this, LoginActivity.class);
startActivity(loginIntent);
finish();
}
}, 2000);
@Override
public void onBackPressed() {
super.onBackPressed();
if (splashHandler != null)
splashHandler.removeCallbacksAndMessages(null);
}
@Override
protected void onResume() {
super.onResume();
if (splashHandler != null)
splashHandler.removeCallbacksAndMessages(null);
}