当时我的需求是这样的,一个客户端要通过我的AIDL不断地发请求打开页面,因此我需要在Service中开启一个线程,当有新的请求发过来的时候我打开页面。之前写的程序要么就是打开一个页面之后死活都不动了,要么就是不停地开启一个新的Activity,然后按back键要退掉很多的Activity,而且关闭所有的Activity之后,Service打开的新Activity又是死活不变换了。
因此我需要Service打开新的页面的时候,把上一个Activity finish掉。尝试很多方法无果之后,只能用广播了,我用Service发一个广播,然后Activity接受到广播之后关闭。
public class AnHTTPTool extends Activity {
private WebView mWebView;
private Context context;
private String mTrafficID;
private String mUrl;
private String mAPN;
private long mRas2Ftp;
private long mIntervalTime;
private int mTimes;
private AnHTTPTool aht;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
//启动mService
HTTPManagerService.startservice(AnHTTPTool.this);
super.onCreate(savedInstanceState);
setContentView(R.layout.browser);
aht = this;
mTrafficID = getIntent().getStringExtra("mTrafficID");
mUrl = getIntent().getStringExtra("mUrl");
mAPN = getIntent().getStringExtra("mAPN");
mRas2Ftp = getIntent().getLongExtra("mRas2Ftp", 0);
mIntervalTime = getIntent().getLongExtra("mIntervalTime", 0);
mTimes = getIntent().getIntExtra("mTimes", 1);
mWebView = (WebView) findViewById(R.id.WebView01);
mWebView.loadUrl(mUrl);
WebSettings mWebSettings = mWebView.getSettings();
MyWebViewClient mWebViewClient = new MyWebViewClient();
mWebView.setWebViewClient(mWebViewClient);
// 增加一个Intent过滤,添加Receiver监听service发送的广播
IntentFilter filter = new IntentFilter();
filter.addAction("Broadcast one!");
registerReceiver(mReceiver, filter);
}
protected BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(action.equals("Broadcast one!")){
aht.finish();
//your code here
}
}
};
}
class MyWebViewClient extends WebViewClient {
// 网页开始加载
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
Log.d("H3c", "PageStarted");
super.onPageStarted(view, url, favicon);
}
// 网页结束加载
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
Log.d("H3c", "PageFinished");
super.onPageFinished(view, url);
}
// 在WebView中打开新的网页
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
}