Java Android应用程序重新打开并继续进行下一个活动,即使按下home按钮或back按钮
我写的这个应用程序在第一个屏幕上有一个包含的线程。所以我给它计时7秒,然后它将继续进行下一个活动 问题是,每当我按下home(主页)按钮时,音乐就会停止并进入android主屏幕,但在计时完成后(即7秒),应用程序将重新出现并显示下一个活动 我试着把Java Android应用程序重新打开并继续进行下一个活动,即使按下home按钮或back按钮,java,android,android-homebutton,Java,Android,Android Homebutton,我写的这个应用程序在第一个屏幕上有一个包含的线程。所以我给它计时7秒,然后它将继续进行下一个活动 问题是,每当我按下home(主页)按钮时,音乐就会停止并进入android主屏幕,但在计时完成后(即7秒),应用程序将重新出现并显示下一个活动 我试着把finish()但它仍然显示下一个活动 这是实际的代码 public class HelloWorldActivity extends Activity { MediaPlayer mp; public void onCreate(
finish()onpause()中的code>代码>但它仍然显示下一个活动
这是实际的代码
public class HelloWorldActivity extends Activity {
MediaPlayer mp;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
mp = MediaPlayer.create(this, R.raw.otj);
mp.start();
Thread LogoTimer = new Thread(){
public void run(){
try{
int LogoTimer = 0;
while(LogoTimer < 7000){
sleep(100);
LogoTimer = LogoTimer + 100;
}
startActivity(new Intent("com.example.HelloWorld.CLEARSCREEN"));
} catch (InterruptedException e) {
e.printStackTrace();
}
finally{
finish();
}
}
};
LogoTimer.start();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mp.release();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mp.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}
}
公共类HelloWorldActivity扩展活动{
MediaPlayer mp;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
mp=MediaPlayer.create(this,R.raw.otj);
mp.start();
线程LogoTimer=新线程(){
公开募捐{
试一试{
int LogoTimer=0;
同时(LogoTimer<7000){
睡眠(100);
LogoTimer=LogoTimer+100;
}
startActivity(新意图(“com.example.HelloWorld.CLEARSCREEN”);
}捕捉(中断异常e){
e、 printStackTrace();
}
最后{
完成();
}
}
};
LogoTimer.start();
}
@凌驾
受保护的空onDestroy(){
//TODO自动生成的方法存根
super.ondestory();
mp.release();
}
@凌驾
受保护的void onPause(){
//TODO自动生成的方法存根
super.onPause();
mp.pause();
}
@凌驾
受保护的void onResume(){
//TODO自动生成的方法存根
super.onResume();
}
@凌驾
受保护的void onStop(){
//TODO自动生成的方法存根
super.onStop();
}
}
首先,这是一种非常低效的计时器运行方式。请尝试以下方法:
new Handler().postDelayed(new Runnable() {
public void run() {
// Do some work.
}
}, delayTimeInMs);
第二,当计时器最终启动时,启动一个新的活动。发起活动是否完成并不重要。startActivity()正在自己的线程上运行,并且将不受影响地执行
postdayed()方法可能会像您预期的那样工作。如果没有,您需要让它在运行时检查它是否真的应该启动活动。但是,我认为处理程序连接到默认的循环器,这意味着如果主活动完成,它将停止(或者更确切地说,消息不会被发布)。首先,这是一种非常低效的运行计时器的方法。请尝试以下方法:
new Handler().postDelayed(new Runnable() {
public void run() {
// Do some work.
}
}, delayTimeInMs);
第二,当计时器最终启动时,启动一个新的活动。发起活动是否完成并不重要。startActivity()正在自己的线程上运行,并且将不受影响地执行
postdayed()方法可能会像您预期的那样工作。如果没有,您需要让它在运行时检查它是否真的应该启动活动。但是,我认为处理程序已附加到默认循环器,这意味着如果主活动完成,它将停止(或者说,消息不会被发布)。应用程序仍在后台,线程未被销毁,因此它将触发startActivity
我不会真的用这种方式设置启动屏幕,或者使用线程,除非出于某种原因我希望它离开UI,即使有更好的选项
出于教育目的,要解决这个问题,您需要能够在onPause()中安全地中止线程,一种方法如下所示
改性螺纹
Thread LogoTimer = new Thread() {
private volatile boolean abortThread = false;
public void run(){
long stopAt = System.currentTimeMillis() + 7000;
while (!abortThread && stopAt > System.currentTimeMillis())
yield();
if (!abortThread)
startActivity ...
}
public synchronized void stopThread() {
abortThread = true;
}
};
应用程序仍在后台,线程未被破坏,因此将触发startActivity
我不会真的用这种方式设置启动屏幕,或者使用线程,除非出于某种原因我希望它离开UI,即使有更好的选项
出于教育目的,要解决这个问题,您需要能够在onPause()中安全地中止线程,一种方法如下所示
改性螺纹
Thread LogoTimer = new Thread() {
private volatile boolean abortThread = false;
public void run(){
long stopAt = System.currentTimeMillis() + 7000;
while (!abortThread && stopAt > System.currentTimeMillis())
yield();
if (!abortThread)
startActivity ...
}
public synchronized void stopThread() {
abortThread = true;
}
};
我是按照一个教程,所以这是我遵循。我要离开这里了?像onpause()一样;顶部();onDestroy();等等。如果我不得不问这个问题,我真的只是一个android的初学者。是的,那些方法看起来不错。我还没有做任何媒体播放器的工作,所以我不知道推荐的获取和发布方法。我会尝试将MediaPlayer.create()放在onStart()中,并在onStop()中释放它,而不是在onDestroy()中释放它。好的,我让它工作了,当我尝试点击home按钮时,它不会再次返回到应用程序。非常感谢。现在我可能需要一本关于Android的Java好书,因为youtube上的教程并不是很好。我一直在关注一本教程,所以我就是这么做的。我要离开这里了?像onpause()一样;顶部();onDestroy();等等。如果我不得不问这个问题,我真的只是一个android的初学者。是的,那些方法看起来不错。我还没有做任何媒体播放器的工作,所以我不知道推荐的获取和发布方法。我会尝试将MediaPlayer.create()放在onStart()中,并在onStop()中释放它,而不是在onDestroy()中释放它。好的,我让它工作了,当我尝试点击home按钮时,它不会再次返回到应用程序。非常感谢。现在我可能需要一本关于Android的Java好书,因为youtube上的教程不是很好。我现在应该把startActivity放在哪里?哦,同样的地方,这只是一个框架,告诉你如何停止线程,但这里我将为你修改,站起来by@regi-见上文,但也要注意Walt的第一个解决方案使用runnable可能更适合您的目的,因为您没有做任何实际工作,我只是向您展示了如何解决问题,如果您有threadok,最后一件事。我的原始代码有什么不好的地方?那是一张图