Приложение работает нормально, но вылетает при нажатии кнопки выхода - PullRequest
0 голосов
/ 23 сентября 2019

Я новичок в Android, приложение вылетает, когда я нажимаю кнопку выхода из системы. Я не понимаю, почему.

Я освободил ресурсы плеера mp, но все равно происходит сбой.

Для кнопки выхода из системы

if(view==logoutbtn)
        {
            if (mp.isPlaying()) { mp.stop();mp.release();}
            firebaseAuth.signOut();
            finish();
            Intent intent=new Intent(ProfileActivity.this,LoginActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
        }

И функция, которая запускается для текущей активности:

request.setInterval(5000);
client.requestLocationUpdates(request, new LocationCallback() {
                        @SuppressLint("NewApi") @Override
                        public void onLocationResult(LocationResult locationResult) {
                            Location location = locationResult.getLastLocation();
                            if (location != null) {


                                play_ringtone();
                                play_flashlight();
                                send_location_message(location.getLatitude(), location.getLongitude());


                            }
                        }
                    }, null);



Logcat, когда я запускаю активность:

W/MessageQueue: Handler (android.telephony.PhoneStateListener$1) {ba9c4a5} sending message to a Handler on a dead thread
    java.lang.IllegalStateException: Handler (android.telephony.PhoneStateListener$1) {ba9c4a5} sending message to a Handler on a dead thread

И функция sms:

private void send_location_message(Double latitude,Double longitude)
    {
        String msg = "Emergency!!\n\nLocation\n\n"+"https://www.google.com/maps/search/?api=1&query="+latitude+","+longitude ;
        for (int i = 0; i < emergency_phones.size(); i++)
        {
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(emergency_phones.get(i), null, msg, null, null);
            Toast.makeText(ProfileActivity.this, "Message Sent To  "+emergency_phones.get(i)+"  "+latitude+" "+longitude, Toast.LENGTH_SHORT).show();
        }
    }

1 Ответ

0 голосов
/ 23 сентября 2019
  1. заключает в себя mp.isPlaying () в Try catch, чтобы избежать исключения нулевого указателя ...

  2. остановка используемого объекта request в объекте request.setInterval () тоже в onDestroy

  3. выпуск или отмена регистрации получателя местоположения в OnDestroy, поскольку я могу видеть вас с помощью клиента.requestLocationUpdates, потому что даже если ваша деятельность остановлена, получатель широковещания все еще будет там, и с новым обновлением местоположения он будет выполнять код внутри, следовательно, всегда необходимо останавливать эти потоки и BroadCastReceivers

  4. этот журнал ошибок относится к телефонии и может находиться за пределами вашего приложения и не связан с ним ...
...