Ich verwende WebView
zum Laden einer Website. Aber es ist sehr langsam und leckt, wenn bestimmte Websites geladen werden. Ich lade WebView
mit dem folgenden Code.WebView lädt die Webseite nicht
@Override
protected void onNewIntent(Intent intent) {
if (intent.getStringExtra("url") != null) {
webView.loadurl(intent.getStringExtra("url"));
}
}
Aber ich rufe webView.loadUrl(Config.URL);
(Config.URL
gleiche URL enthalten kann, wie oben angegeben) nach WebView
in onCreate()
Verfahren mit dem folgenden initialisiert.
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);
Laden ein von
onCreate()
funktioniert gut (nicht in Ordnung, es ist zu langsam). Aber die gleiche URL, die vononNewIntent()
geladen wird, ist funktioniert nicht !!!. Nachdem ich dies inonNewIntent()
getan habe, wurden keine URLs geladen mitwebView.loadurl()
und die aktuelle Seite wird unbeweglich. dh. Die Scrollbars bewegen sich inWebView
, aber die Seite scrollt nicht. Ich testete die gleiche URL inonCreate()
und es funktioniert.
zu tun, dass ich url bin vorbei mit
intent.putExtra("url", Config.URL+targetUrl);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
mit der anstehenden Absicht aus den Meldungen. Obwohl es in einigen Geräten funktioniert, d. H. Google Nexus. Aber es funktioniert nicht bei den meisten Telefonen. Ich habe
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();
}
Die Frage ist: Was das Problem ist, wenn loadurl()
Methode in onNewIntent()
mit?
Entschuldigung, mein Herr, finden Sie die gewünschten Ergebnisse in ** intent.getStringExtra ("url") **? Gibt es bei LogCat seltsame Nachrichten? Vielen Dank. – statosdotcom
@statosdotcom ja ich fand es in der Absicht. In Logcat wird angezeigt, dass die Webseite geladen wird, aber nicht display.ie. Seite ändert sich nicht von vorheriger –
Bitte fügen Sie Ihre OnPause-Methode ein, wenn Sie sie so verwenden, wie sie vor OnNewIntent aufgerufen wurde. Hast du auch einen Breakpoint bei OnNewIntent, d. H. Bist du sicher, dass er getroffen wird? –