Я зарегистрировал SMS_RECIEVED
broadcastreceiver
в CustomWebView. Я позаботился о регистрации и отмене регистрации получателя на жизненном цикле деятельности. Все работает хорошо до изменения ориентации.Утечка IntentReciever при изменении ориентации
Я попытался размещения регистр/незарегистрированный приемник при различных состояниях WebView как onAttachedToWindow()
/onDetachedFromWindow()
, onPause()
/onResume()
(явного вызова от активности onPause()
-х/onResume()
), onStart()
/onStop()
. Но ничто не мешает IntentReceiver
утечкам при изменении ориентации.
Вот код, я пробовал:
CustomWebView.java
public class CustomWebView extends WebView {
BroadcastReceiver reciver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
Log.v(tag, "Got PDUS Obj [" + pdusObj + "]");
}
}
} catch (Exception e) {
Log.e(tag, "Exception smsReceiver" + e);
}
}
};
--------------------
--------------------
some code
--------------------
@Override
public void onResume() {
try {
IntentFilter intents = new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED");
getContext().registerReceiver(reciver, intents);
Log.i(tag, "Webview sms reciever registered");
} catch (Exception e) {
e.printStackTrace();
}
super.onResume();
}
@Override
public void onPause() {
try {
getContext().unregisterReceiver(reciver);
Log.i(tag, "Webview sms reciever unregistered");
} catch (Exception e) {
e.printStackTrace();
}
super.onPause();
}
// Tried this one too
/* @Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
Log.i(tag, "Billdesk onAttach to window called");
try {
IntentFilter intents = new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED");
getContext().registerReceiver(reciver, intents);
Log.i(tag, "Webview sms reciever registered");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
Log.i(tag, "Billdesk onDetach From window to window called");
try {
getContext().unregisterReceiver(reciver);
Log.i(tag, "Webview sms reciever unregistered");
} catch (Exception e) {
e.printStackTrace();
}
} */
}
MainActivity.java
public class MainActivity extends FragmentActivity{
-----------
-----------
-----------
@Override
protected void onPause() {
if (this.customWebView != null)
this.customWebView.onPause();
super.onPause();
}
@Override
protected void onResume() {
if (this.customWebView != null)
this.customWebView.onResume();
super.onResume();
}
}
Я получаю следующее сообщение об ошибке, когда ориентация изменяется:
Activity com.abcd.xyz.ActivityClass has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
Заранее спасибо.
В какой строке возникает проблема? –
Почему вы не создаете такие методы, как registerReceiver/unregisterReceiver в CustomWebView, а затем вызываете его из родителя onResume/onPause ... также является частью CustomWebView макета Activity или макета фрагмента? – Selvin
@ ρяσѕρєяK Я получаю сообщение об ошибке при вызове getContext(). RegisterReceiver (reciver, intents); на CustomWebView после изменения ориентации – Bhupesh