当我使用其他应用时,Android活动会显示在最顶层

时间:2017-03-03 13:32:22

标签: android

我有一个长时间运行的操作。在线程内部,我开始像这样的新活动

 @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();
    }

问题是当我运行另一个应用程序并且线程完成时,该活动显示在屏幕顶部。如何强迫这项活动不要出现在顶层?

2 个答案:

答案 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);
}