Je me demande s'il y a plusieurs instances de webview en cours de création dans mon application Android. Si oui, comment le résoudre?Android Webview - Crée-t-il plusieurs instances?
La raison de ma confusion est que cela se voit dans mes outils de développement Chrome.
Chaque fois que j'appelle loadURL, un nouvel élément de campagne apparaît sur Chrome comme si une nouvelle instance de WebView était créée. et voici mon code
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webview);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
myWebView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
// Page is done loading;
_appRunning = true;
}
});
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
myWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
myWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
final WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAppCachePath(f.getAbsolutePath());
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
}
@Override
public void onResume(){
super.onResume();
if(!checkConnectivity()) return;
_appRunning = true;
WebView myWebView = (WebView) findViewById(R.id.webview);
String url = getString(R.string.app_url);
myWebView.loadUrl(url);
myWebView.onResume();
hideSystemUI();
}
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
stopPlayer();
//myWebView.onPause();
}
@Override
public void onStop() {
stopPlayer();
super.onStop();
}
private void stopPlayer(){
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("about:blank");
showSystemUI();
_appRunning = false;
}
Il existe des cas où la méthode onResume() est appelée plusieurs fois, ce qui peut provoquer le problème. Je suggère de mettre cette ligne WebView myWebView = (WebView) findViewById (R.id.webview); Chaîne url = getString (R.string.app_url); dans la méthode onCreate() de votre code – Ikun
Je l'ai dans onCreate() aussi. Le comportement que je vois est lorsque l'utilisateur appuie sur le bouton d'accueil et lance à nouveau l'application. Chaque fois que l'application est lancée, elle apparaît à peu près comme une nouvelle ligne sur les outils de développement Chrome. – Bhuvan
Il semble que chaque fois que l'application est appelée avec une intention, elle crée une nouvelle instance de l'activité. L'appel de la méthode finish() dans les méthodes onStop() et onResume() a résolu ce problème. J'essaie toujours de trouver une meilleure solution, car je veux vraiment garder et réutiliser l'instance de l'activité pour effectuer certaines opérations en arrière-plan, alors que l'application est dans l'arrière-plan. – Bhuvan