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 媒体播放器如何继续播放歌曲?

在我的应用程序中发出**哔声**? [复制]

Cordova - 关闭通知将丢失其中的数据

当我使用 WebView loadUrl 函数时,Android Studio 应用程序被强制关闭

如何杀死我正在运行的 Android 应用程序? [复制]

当我在 Android Web 浏览器中关闭运行 CodeIgniter Web 应用程序的 Android 应用程序时,CodeIgniter 会话不会关闭