应用程序正常运行但在单击注销按钮时崩溃
App works normally but crashes on clicking logout button
我是 android 的新手,当我单击注销时应用程序崩溃 button.I 我不明白为什么。
我释放了 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);
}
而运行在当前activity上的函数是
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 当我 运行 activity 是:
W/MessageQueue: Handler (android.telephony.PhoneStateListener) {ba9c4a5} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.telephony.PhoneStateListener) {ba9c4a5} sending message to a Handler on a dead thread
而短信功能是
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();
}
}
将mp.isPlaying()包含在Try catch中以避免空指针异常...
在 onDestroy
中也停止在 request.setInterval() 对象中使用的 request 对象
释放或取消注册 OnDestroy 中的位置接收器,因为我可以看到你使用客户端。 requestLocationUpdates ,因为即使您的 activity 已停止,广播接收器仍将存在,并且随着新的位置更新,它将 运行 内部代码,因此始终有必要停止这些线程和 BroadCastReceivers
- 该错误日志是关于电话的,可能在您的应用程序之外并且不相关...
我是 android 的新手,当我单击注销时应用程序崩溃 button.I 我不明白为什么。
我释放了 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);
}
而运行在当前activity上的函数是
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 当我 运行 activity 是:
W/MessageQueue: Handler (android.telephony.PhoneStateListener) {ba9c4a5} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.telephony.PhoneStateListener) {ba9c4a5} sending message to a Handler on a dead thread
而短信功能是
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();
}
}
将mp.isPlaying()包含在Try catch中以避免空指针异常...
在 onDestroy
中也停止在 request.setInterval() 对象中使用的 request 对象
释放或取消注册 OnDestroy 中的位置接收器,因为我可以看到你使用客户端。 requestLocationUpdates ,因为即使您的 activity 已停止,广播接收器仍将存在,并且随着新的位置更新,它将 运行 内部代码,因此始终有必要停止这些线程和 BroadCastReceivers
- 该错误日志是关于电话的,可能在您的应用程序之外并且不相关...