У меня есть следующий код, который фактически проверяет наличие 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), оба метода работают отлично.
Почему это происходит?