私はSMS_RECIEVED
broadcastreceiver
をCustomWebViewに登録しました。私はレシーバーの登録と登録解除を世話をしました。オリエンテーションが変わるまで、すべてがうまくいく。IntentRecieverオリエンテーションの変更時にリーク
私はonAttachedToWindow()
/onDetachedFromWindow()
のようなのWebViewの異なる状態の下で/登録解除レシーバ、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()?
ありがとうございます。電話が回転し、画面が向きを変えるとき
どのラインで問題が発生していますか? –
CustomWebViewでregisterReceiver/unregisterReceiverのようなメソッドを作成してから、それを親のonResume/onPauseから呼び出すのはなぜですか...アクティビティのレイアウトまたはフラグメントレイアウトのCustomWebViewの部分ですか? – Selvin
@ρяσѕρєяKgetContext()を呼び出すときにエラーが発生します。registerReceiver(reciver、intents);オリエンテーションを変更した後のCustomWebViewで@Selvin – Bhupesh