Приемник вещания не завершит выполнение кода sh без точек останова - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть следующий код, который фактически проверяет наличие inte rnet подключения и запускает фоновую службу:

class MainActivity : AppCompatActivity()
{
    private var receiver: BroadcastReceiver? = null
    private var service: Intent? = null
    private var context: Context? = null

    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        context = applicationContext

        receiver = NetworkChangeReceiver()
        registerReceiver(receiver, IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION))

        if (isConnected())
        {
            startIceService()
        }
    }

    override fun onDestroy()
    {
        super.onDestroy()
        unregisterReceiver(receiver)
    }

    private fun isConnected(): Boolean
    {
        val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val netInfo = cm.activeNetworkInfo
        return netInfo != null && netInfo.isConnected
    }

    private fun startIceService()
    {
        connection_ball.setImageDrawable(context.resources.getDrawable(R.drawable.green_ball, null))
        connection_text.text = "Connected correctly"
        service = Intent(context, CommunicationService::class.java)
        context.startService(service)
    }

    private fun stopIceService()
    {
        connection_ball.setImageDrawable(context.resources.getDrawable(R.drawable.red_ball, null))
        connection_text.text = "Connectivity problems"
        context.stopService(service)
        service = null
    }

    inner class NetworkChangeReceiver : BroadcastReceiver()
    {
        override fun onReceive(context: Context, intent: Intent)
        {
            if (isConnected() && service == null)
            {
                startIceService()
            }
            else if (!isConnected() && service != null)
            {
                stopIceService()                    
            }
        }
    }

Если я выполняю этот код без точек останова, выполняется только метод StopIceService, StartIceService() никогда не выполняется.

Если я помещаю точку останова в первой строке onReceive() и выполняю строку за строкой или нажимаю F9 (Resume Program), оба метода работают отлично.

Почему это происходит?

...