Tôi đang sử dụng WebView
để tải trang web. Nhưng nó rất chậm và bị rò rỉ khi các trang web cụ thể được tải. Tôi đang tải WebView
bằng mã sau.WebView không tải trang web
@Override
protected void onNewIntent(Intent intent) {
if (intent.getStringExtra("url") != null) {
webView.loadurl(intent.getStringExtra("url"));
}
}
Nhưng tôi kêu gọi webView.loadUrl(Config.URL);
(Config.URL
có thể chứa cùng một url như đã nêu ở trên) trong onCreate()
phương pháp sau khởi WebView
với những điều sau đây.
this.webView = (WebView) findViewById(R.id.wv);
this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.getSettings().setLoadsImagesAutomatically(true);
this.webView.getSettings().setDomStorageEnabled(true);
this.webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
MyClient client = new MyClient(WebActivity.this, (ProgressBar)findViewById(R.id.progressBar));
webView.setWebViewClient(client);
tải một từ
onCreate()
đang làm việc tốt (không tốt, nó quá chậm). Nhưng cùng một URL đang tải từonNewIntent()
là không hoạt động !!!. Sau khi tôi thực hiện điều này trongonNewIntent()
không có URL nào được tải bằng cách sử dụngwebView.loadurl()
và trang hiện tại đang nhận được bất động. I E. thanh cuộn đang di chuyển trongWebView
nhưng trang không cuộn. Tôi đã kiểm tra cùng một URL trongonCreate()
và đang hoạt động.
Để làm điều mà tôi đang đi qua url với
intent.putExtra("url", Config.URL+targetUrl);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
với mục đích cấp phát từ các thông báo. Mặc dù nó đang hoạt động ở một số thiết bị, nghĩa là Google Nexus. Nhưng nó không hoạt động trên hầu hết các điện thoại. Tôi có
android:hardwareAccelerated="true"
Myclient
public class MyClient extends WebViewClient{
private Context context;
private Activity activity;
private Handler handler;
private Runnable runnable;
private ProgressBar viewBar;
private String ret,ret2;
public void setFirstLoad(boolean firstLoad) {
this.firstLoad = firstLoad;
}
private boolean firstLoad=false;
public MyClient(Activity activity, ProgressBar bar) {
this.context = activity.getApplicationContext();
this.activity = activity;
viewBar=bar;
handler=new Handler();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
/*if (url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_DIAL,
Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}else if(url.startsWith("http:") || url.startsWith("https:")) {
*//*view.setVisibility(View.GONE);
viewBar.setVisibility(View.VISIBLE);*//*
view.loadUrl(url);
}
return true;*/
if (Uri.parse(url).getHost().equals("www.somepage.com")) {
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Answers.getInstance().logShare(new ShareEvent()
.putContentId(Build.USER)
.putMethod(shareName(url))
.putContentName(contentDecode(url))
.putContentType("news_share"));
}catch (android.content.ActivityNotFoundException e){
Log.e("Activity not found",e.toString());
Toast.makeText(context,"Application not found",Toast.LENGTH_LONG).show();
}
return true;
}
@Override
public void onReceivedError(final WebView view, int errorCode, String description, final String failingUrl) {
//Clearing the WebView
try {
view.stopLoading();
} catch (Exception e) {
}
try {
view.clearView();
} catch (Exception e) {
}
if (view.canGoBack()) {
view.goBack();
}
view.loadUrl("about:blank");
//Showing and creating an alet dialog
AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
alertDialog.setTitle("Error");
alertDialog.setMessage("No internet connection was found!");
alertDialog.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
view.loadUrl(failingUrl);
}
});
AlertDialog alert = alertDialog.create();
alert.show();
//Don't forget to call supper!
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public void onLoadResource(final WebView view, String url) {
super.onLoadResource(view, url);
//injectScriptFile(view, "js/script.js");
injectCSS(view,"css/style.css");
if (firstLoad){
firstLoad=false;
view.setVisibility(View.INVISIBLE);
viewBar.setVisibility(View.VISIBLE);
runnable=new Runnable() {
@Override
public void run() {
viewBar.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
}
};
handler.postDelayed(runnable,2000);
}
// test if the script was loaded
// view.loadUrl("javascript:setTimeout(hideMe(), 200)");
}
/*@Override
public void onPageFinished(final WebView view, String url) {
//System.gc();
}*/
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
System.gc();
}
Câu hỏi đặt ra là: vấn đề là gì khi sử dụng phương pháp trong loadurl()
onNewIntent()
?
Xin lỗi, bạn có đang tìm kết quả mong muốn trong ** intent.getStringExtra ("url") ** không? Ngoài ra, có tin nhắn lạ ở LogCat? Cảm ơn bạn. – statosdotcom
@statosdotcom vâng tôi đã tìm thấy nó trong mục đích. Trong Logcat cho thấy trang web đang tải nhưng không hiển thị. trang không thay đổi từ –
trước đó Vui lòng bao gồm phương thức OnPause của bạn nếu bạn đang sử dụng phương thức này vì nó được gọi trước OnNewIntent. Ngoài ra, bạn có điểm dừng trên OnNewIntent nghĩa là bạn có chắc là nó bị tấn công không? –