Android如何在屏幕关闭/打开时防止webview重新加载?

     2023-02-21     128

关键词:

【中文标题】Android如何在屏幕关闭/打开时防止webview重新加载?【英文标题】:Android how to prevent webview reload when the screen is off/on? 【发布时间】:2018-03-20 05:20:36 【问题描述】:

我看到了很多与我的问题相关的文档和文章。但我没有得到任何适当的解决方案。当我按下电源按钮打开/关闭时,WebView 将被重新加载。我不想重新加载WebView

我正在尝试的是......

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    StrictMode.ThreadPolicy policy = new 
    StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    loadpages();

private BroadcastReceiver receiver = new BroadcastReceiver() 
    @Override
    public void onReceive(Context context, Intent intent) 
        if (!ConnectivityStatus.isConnected(context)) 
            // no connection
            WebView wv = (WebView) findViewById(R.id.webView1);
            wv.loadData(iError, "text/html", "UTF-8");
            // Toast.makeText(getApplicationContext(),"Internet connection failure",Toast.LENGTH_SHORT).show();
        
    
;

@Override
protected void onResume() 
    super.onResume();
    this.registerReceiver(receiver, new 
IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

 @Override
protected void onPause() 
    super.onPause();
    this.unregisterReceiver(receiver);
 
@Override
public void onBackPressed() 
    AlertDialog.Builder alertDialog = new 
   AlertDialog.Builder(MainActivity.this);
    alertDialog.setTitle("Local");
    alertDialog.setMessage("Exit Application");
    alertDialog.setCancelable(true);
    alertDialog.setPositiveButton("YES", new 
    DialogInterface.OnClickListener() 
        public void onClick(DialogInterface dialog, int which) 
       // User pressed YES button. Write Logic Here
            MainActivity.this.finish();  
        
    );
    alertDialog.setNegativeButton("NO", new 
   DialogInterface.OnClickListener() 
        public void onClick(DialogInterface dialog, int which) 
            // User pressed No button. Write Logic Here
            //   Toast.makeText(getApplicationContext(), "You clicked on 
           NO", Toast.LENGTH_SHORT).show();
        
    );
    alertDialog.show();

@Override
public void onConfigurationChanged(Configuration newConfig) 
    super.onConfigurationChanged(newConfig);

@SuppressLint("NewApi")
public boolean loadpages() 
    WebView wv = (WebView) findViewById(R.id.webView1);
    WebSettings webSettings = wv.getSettings();
    webSettings.setJavaScriptEnabled(true);
    wv.getSettings().setLoadWithOverviewMode(true);
    wv.getSettings().setUseWideViewPort(true);
    CookieManager.getInstance().setAcceptCookie(true);
     TelephonyManager mngr = (TelephonyManager) 
    getSystemService(Context.TELEPHONY_SERVICE);
    String imeino = mngr.getDeviceId().toString();
   CookieManager.getInstance().setCookie
   ("http://MyLocalHost/projects/aaaaa", "IMEINO=" + imeino);
    String url = "http://MyLocalHost/projects/aaaaa/index.php"
    wv.setWebViewClient(new WebViewClient() 
  public boolean shouldOverrideUrlLoading(WebView view, String url) 
    if (!loadingFinished) 
    redirect = true;
    
    loadingFinished = false;
    view.loadUrl(url);
    return true;
    
  @SuppressWarnings("unused")
  public void onPageStarted(WebView view, String url) 
    loadingFinished = false;
    // SHOW LOADING IF IT ISNT ALREADY VISIBLE
    
  public void onPageFinished(WebView view, String url) 
    if (!redirect) 
    loadingFinished = true;
    
    if (loadingFinished && !redirect) 
    // HIDE LOADING IT HAS FINISHED
     else 
    redirect = false;
     
    
    );
    loadingFinished = false;
    wv.loadUrl(url);
   return loadingFinished;
 

我正在尽力而为。我还在 AndroidManifest.xml 文件中添加了android:launchMode="singleTask"。你们能解决我的问题吗?

【问题讨论】:

检查你的广播接收器 onReceive()。如果你收到 onResume(),你的 webview 将在片段/活动恢复时加载。 @james 是的,我检查了。但没有得到任何解决方案 【参考方案1】:

尝试:

if (savedInstanceState == null)

web.loadUrl(webURL);

【讨论】:

在恢复和暂停时只检查网络连接 然后告诉我你的手机内存已满或者你有一些空间如果是然后告诉我剩余空间 如果您在 Activity 进入停止状态时将代码置于 onCreate() 方法中,并且如果设备内存较少,则进程将被终止并将内存分配给高优先级应用程序。返回时它从 oncreate() 方法恢复,这里不仅重新加载您的 webView,而且重新加载整个应用程序。【参考方案2】:

尝试在你的生命周期方法中添加:

@Override
protected void onSaveInstanceState(Bundle outState )

super.onSaveInstanceState(outState);
web.saveState(outState);


@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)

super.onRestoreInstanceState(savedInstanceState);
web.restoreState(savedInstanceState);

【讨论】:

在筛选后检查您的 webview 从哪里重新加载。我的意思是把登录 oncreate,onpause,onresume,loadpages 方法 @A2N 屏幕锁定应用调用 onpause 或 onStop.screen 解锁应用调用恢复。 设置webviewclient和js启用为true 1.在您开始加载 webview 的同时启动一个计时器。 2.在计时器内检查 isloadingFinished 并在需要时显示错误屏幕developer.android.com/reference/android/os/CountDownTimer.html【参考方案3】:

试试

@Override
protected void onStart() 
    super.onStart();
    this.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));


@Override
protected void onStop() 
    super.onStop();
    this.unregisterReceiver(receiver);

而不是

@Override
protected void onResume() 
    super.onResume();
    this.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
 

@Override
protected void onPause() 
    super.onPause();
    this.unregisterReceiver(receiver);

【讨论】:

底部对话框打开时如何防止键盘关闭?

】底部对话框打开时如何防止键盘关闭?【英文标题】:Howtopreventkeyboardfromclosingwhenbottomdialogisopen?【发布时间】:2018-02-1819:06:40【问题描述】:有没有办法不关闭键盘,而只是显示键盘的对话框(在它上面)。对话框关闭后我需... 查看详情

c#当屏幕/显示器电源关闭或打开时如何获取事件?

】c#当屏幕/显示器电源关闭或打开时如何获取事件?【英文标题】:c#Howtogettheeventswhenthescreen/displaygoestopowerOFForON?【发布时间】:2011-01-1314:17:22【问题描述】:您好,我一直在寻找,但找不到答案。我怎么知道屏幕何时关闭或打... 查看详情

如何在我的应用打开且屏幕打开时允许 Android 打瞌睡?

】如何在我的应用打开且屏幕打开时允许Android打瞌睡?【英文标题】:HowcanIallowAndroidtoDozewhilemyappisopenandthescreenison?【发布时间】:2019-03-3002:38:25【问题描述】:我正在通过Activity#setShowWhenLocked(true)制作一个将在设备锁定时运行... 查看详情

防止折叠在模态打开时折叠

...述】:我正在尝试在不触发折叠单击事件的情况下打开和关闭模式,但由于模式按钮是折叠单击元素的子元素,因此我无法找到一种方法。e.stopPropagation()有效,但它会导致其他问题,所以它不是一个选项。JSFiddle.wrapbackground:g 查看详情

屏幕打开/关闭时如何更新 Android 小部件?

】屏幕打开/关闭时如何更新Android小部件?【英文标题】:HowtoupdateanAndroidwidgetwhenthescreenisturnedOn/Off?【发布时间】:2022-01-0103:57:39【问题描述】:我编写了一个电池监视器小部件,我可以在屏幕打开时使用带有BroadcastReceivers和警... 查看详情

移动网络 - 如何在键盘打开时获取屏幕高度

】移动网络-如何在键盘打开时获取屏幕高度【英文标题】:Mobileweb-Howtogetthescreen\'sheightwhenthekeyboardisopen【发布时间】:2019-01-0418:14:05【问题描述】:我需要知道我的网络应用程序的实际可见高度以进行不同的计算。当软键盘打... 查看详情

知道为啥我发布的 Android 应用在打开时会立即关闭吗?

】知道为啥我发布的Android应用在打开时会立即关闭吗?【英文标题】:AnyideawhydoesmypublishedAndroidappinstantlyclosewhenIopenit?知道为什么我发布的Android应用在打开时会立即关闭吗?【发布时间】:2018-11-0510:11:10【问题描述】:我的应用... 查看详情

防止在关闭屏幕时重新创建 Android 活动

】防止在关闭屏幕时重新创建Android活动【英文标题】:PreventAndroidactivityfrombeingrecreatedonturningscreenoff【发布时间】:2012-05-1622:30:51【问题描述】:如何防止在关闭屏幕时重新创建活动?我做什么启动Bejewels并转到珠宝屏幕。短按... 查看详情

引导模式打开时如何防止滚动正文内容

】引导模式打开时如何防止滚动正文内容【英文标题】:Howtopreventscrollingofthebodycontentwhenbootstrapmodalisopen【发布时间】:2014-01-0101:19:41【问题描述】:我正在使用AngularUIBootstrapModalbox。当模态打开时,正文有一个滚动。当我滚动模... 查看详情

可以在打开时截取 <select> 的屏幕截图

】可以在打开时截取<select>的屏幕截图【英文标题】:possibletotakescreenshotof<select>whileopen【发布时间】:2021-12-3011:36:35【问题描述】:我们有一个带有选择框下拉菜单的网页。我需要使用选择下拉菜单“打开”来截取页面... 查看详情

键盘打开时如何固定小部件布局?

】键盘打开时如何固定小部件布局?【英文标题】:Howtoimmobilizewidgetlayoutwhenkeyboardisopen?【发布时间】:2020-01-1909:32:06【问题描述】:我正在开发一个Flutter应用程序。在特定屏幕中,我有一个Cupertino样式的文本字段。(整个应用... 查看详情

在 Modal 中防止键盘关闭 React Native

...sideModal【发布时间】:2020-11-1602:22:45【问题描述】:我在屏幕底部有一个文本输入,按下时会扩展为一个更大的部分,其中包含一些选项。bottomHeight和height在键盘打开时增加。当按下额外容器中的这些预定义tags之一时,我不想... 查看详情

如何在键盘打开时隐藏浮动按钮(Android/iOS)?

】如何在键盘打开时隐藏浮动按钮(Android/iOS)?【英文标题】:Howtohidefloatingbuttononkeyboardopen(Android/iOS)?【发布时间】:2020-02-2812:36:06【问题描述】:我的网站上有一个使用Reactjs构建的浮动按钮。每当我在手机上打开键盘时,我... 查看详情

防止页面打开时IOS自动对焦第一次输入离子

...进入该状态时,键盘会自动弹出。这不是所希望的。这在Android版本上不会发生。我已经尝试了各种各样的东西,但没有任何东西可以对其进行排序。我最后一次尝试是在$stateC 查看详情

从 iPhone 主屏幕重新打开时,如何在 jQuery Mobile 应用程序上缓存并保留上次访问的页面?

】从iPhone主屏幕重新打开时,如何在jQueryMobile应用程序上缓存并保留上次访问的页面?【英文标题】:Howtocache&persistthelastvisitedpageonajQueryMobileapplication,whenre-openedfromiPhonehomescreen?【发布时间】:2012-02-0822:41:10【问题描述】:我... 查看详情

使用人脸 ID 从锁定屏幕打开时应用程序被阻止

】使用人脸ID从锁定屏幕打开时应用程序被阻止【英文标题】:Appisblockedwhenopeningfromlockscreenwithfaceid【发布时间】:2021-12-2707:02:41【问题描述】:我有一个应用程序在我的应用程序运行时禁止其他应用程序使用相机,但是当我将... 查看详情

iPhone SDK - 如何在应用程序关闭和重新打开时保存和恢复计时器标签

】iPhoneSDK-如何在应用程序关闭和重新打开时保存和恢复计时器标签【英文标题】:iPhoneSDK-HowtosaveandresumetimerLabelwhenappisclosedandreopened【发布时间】:2014-07-2800:53:34【问题描述】:我有一个倒数计时器,当您启动它时,它会创建一... 查看详情

Flutter:屏幕打开时自动滚动到底部

...把它放在initState()它的不工作,但如果我按下按钮它工作如何让它自动 查看详情