2011-09-15 146 views
0

这是我的第一个活动,当我按下电话中的后退按钮时,应用程序关闭,但第二个活动即使在关闭后也弹出!可能是因为线程仍在运行?但我试图摧毁它,但无济于事!任何建议应用程序即使在关闭后也会启动

protected void onCreate(Bundle myclass) { 
    super.onCreate(myclass); 
    setContentView(R.layout.splash); 
    timer = new Thread() { 
     public void run() { 
      try { 
       sleep(3000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      finally { 
       Intent openStarting = new Intent("nik.tri.MENU"); 
       startActivity(openStarting); 
      } 
     } 
    }; 
    timer.start(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    timer.destroy(); // tried timer.stop() as well 
    finish(); 
} 

}

回答

3

是的,Thread参与这一过程:

当你按下后退按钮,你不只是灭,也不阻止你的应用程序,你使其看不见。当时调用onPause(),但finish()只是终止您的Activity的工作流程:Activity它仍在内存中,而将在稍后的某个时间点销毁。所以Thread继续运行。并致电Thread.stop()效率不高as explained in the doc

此方法已弃用。因为以这种方式停止线程是不安全的,会使应用程序和虚拟机处于不可预知的状态。

因此Thread仍在运行,这就是为什么应用程序在3秒后重新启动。或者我应该说,开始一个新的Activity

我不明白你为什么要使用此Thread启动一个新的Activity后3秒,但考虑这是理所当然的,你应该:

  • 使用您Thread一个boolean以确定是否可以启动或不:

    timer = new Thread() { 
        public void run() { 
         try { 
          sleep(3000); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
         finally { 
          if (!paused) { 
           Intent openStarting = new Intent("nik.tri.MENU"); 
           startActivity(openStarting); 
          } 
         } 
        } 
    }; 
    
  • 并处理标志onPause()/onResume()

    @Override 
    protected void onPause() { 
        paused = true; 
        super.onPause(); 
    
        finish(); // well, I don't get that either, but I take it for granted as well. 
    } 
    
    @Override 
    protected void onResume() { 
        super.onResume(); 
        paused = false; 
    } 
    
0

尝试杀死的OnDestroy方法应用。

int pid=android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 

试试这个,可能它可以帮助你

相关问题