Android:当我关闭应用程序时,哔声继续
Posted
技术标签:
【中文标题】Android:当我关闭应用程序时,哔声继续【英文标题】:Android: Beep continues when I close the app 【发布时间】:2013-11-28 15:38:19 【问题描述】:我有问题。我的应用程序发出一些哔声,但是当我关闭应用程序时哔声继续,并且要结束它我必须从“任务管理器”关闭应用程序。这是哔声在哪里。
private void playAlertTone(final Context ctx)
t = new Thread()
public void run()
player = MediaPlayer.create(ctx, R.raw.beep_1);
while(true)
if( appDegree != -1 )
if( getDistance() <= 5 )
player = MediaPlayer.create(ctx, R.raw.beep_4);
else if( getDistance() <= 50 )
player = MediaPlayer.create(ctx, R.raw.beep_3);
else if( getDistance() <= 120 )
player = MediaPlayer.create(ctx, R.raw.beep_2);
else
player = MediaPlayer.create(ctx, R.raw.beep_1);
else
player = MediaPlayer.create(ctx, R.raw.beep_1);
player.start();
try
Thread.sleep(player.getDuration());
player.release();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
;
t.start();
`
是的,我只是从应用程序切换到主屏幕。
它与 some_public_flag 一起工作到 while 和
`
@Override
public void onStop()
super.onStop();
some_public_flag = false;
`
【问题讨论】:
【参考方案1】:这是因为当您关闭活动时,线程继续工作。 您应该设法中断 onStop 活动方法中的线程。 尝试添加此代码:
@Override
public void onStop()
super.onStop();
t.interrupt();
无论如何,当您在 android 中说“我关闭应用程序”时可能会模棱两可:您是退出应用程序还是只是从应用程序切换到主屏幕? 在第一种情况下,您必须在活动中调用函数 finish()(例如:在 onClickListener 或 onClose 方法中)。如果您只是按后退按钮切换到主屏幕,您并没有关闭应用程序,而只是将您的活动以暂停模式移动到后台,这不会阻止线程完成运行。
如果您想在用户切换回应用程序时唤醒您的线程,您可以覆盖 onStart 方法。
@Override
public void onStart()
super.onStart();
t.run();
注意:onDestroy 方法仅在应用程序实际退出时调用,如果它在后台,则它只是处于停止模式。您可以阅读有关活动生命周期的更多信息here。
【讨论】:
【参考方案2】:您需要以某种方式退出while(true)
循环。启动此方法时将全局变量设置为 true,退出应用程序/或特定屏幕时将该变量设置为 false。
如果你从活动中做到这一点:
public void onDestroy()
super.onDestroy();
if(isFinishing())
// set the variable to false
您的方法将更改为: private void playAlertTone(final Context ctx)
t = new Thread()
public void run()
some_public_flag = true;
player = MediaPlayer.create(ctx, R.raw.beep_1);
while(some_public_flag)
if( appDegree != -1 )
if( getDistance() <= 5 )
player = MediaPlayer.create(ctx, R.raw.beep_4);
else if( getDistance() <= 50 )
player = MediaPlayer.create(ctx, R.raw.beep_3);
else if( getDistance() <= 120 )
player = MediaPlayer.create(ctx, R.raw.beep_2);
else
player = MediaPlayer.create(ctx, R.raw.beep_1);
else
player = MediaPlayer.create(ctx, R.raw.beep_1);
player.start();
try
Thread.sleep(player.getDuration());
player.release();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
;
t.start();
【讨论】:
【参考方案3】:您必须致电.finish()
关闭整个应用程序,因为它仍会在后台运行并发出哔哔声。您确定要完成您的应用程序吗?
【讨论】:
以上是关于Android:当我关闭应用程序时,哔声继续的主要内容,如果未能解决你的问题,请参考以下文章
关闭应用程序后,Android 媒体播放器如何继续播放歌曲?
当我使用 WebView loadUrl 函数时,Android Studio 应用程序被强制关闭
当我在 Android Web 浏览器中关闭运行 CodeIgniter Web 应用程序的 Android 应用程序时,CodeIgniter 会话不会关闭