热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android一组WebView的随机,顺序,倒序加载

写了个应用,实现了一组WebView的顺序,倒序,和随机加载。之中使用了延时,为什么要使用呢?请看下图:packagecom.zms.csdngo;imp

写了个应用,实现了一组WebView的顺序,倒序,和随机加载。之中使用了延时,为什么要使用呢?请看下图:

技术分享


package com.zms.csdngo;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.Random;


public class Main extends ActionBarActivity {
    private String urlIndex = "http://blog.csdn.net/zhoumushui/article/details/";
    private WebView mWebView;
    private String webPath;
    private int count = 0;          // 当前加载的页面ID
    private int reverseCount = 0;
    private int realCount = 0;      // 已加载的页面数
    private int limitCount = 0;   // 最大加载页面,到达此数值退出应用;为0表示不限制
    private Boolean isLimit = false;
    private TextView tvState = null;
    private TextView mTimeHint = null;
    private TextView mTimeCount = null;
    private TextView tvWebHour = null;

    private TextView tvLimit = null;
    private EditText etLimit = null;

    private int loadMode = 3;   // 1-顺序加载;2-倒序加载;3-随机加载

    private Button btnShowHide;
    private Button btnChangeMode;
    private static PowerManager.WakeLock wakeLock;
    private int timeSec = 0;    // 秒数,计时用
    private int webHour = 8;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mWebView = (WebView) findViewById(R.id.mWebView);
        tvState = (TextView) findViewById(R.id.tvState);
        mTimeHint = (TextView) findViewById(R.id.mTimeHint);
        mTimeCount = (TextView) findViewById(R.id.mTimeCount);
        tvWebHour = (TextView) findViewById(R.id.tvWebHour);
        tvLimit = (TextView) findViewById(R.id.tvLimit);
        etLimit = (EditText) findViewById(R.id.etLimit);
        btnShowHide = (Button) findViewById(R.id.btnShowHide);
        btnChangeMode = (Button) findViewById(R.id.btnChangeMode);

        initModeBtn();
        initUrl();
        count = 0;
        reverseCount = urlArray.length - 1;
        setLimit(tvState);
        //setMode(mTextView);
        new Thread(new TimeThread()).start();   // 计时线程
        new Thread(new loadThread()).start();  // 加载线程
    }

    final Handler timeHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    timeSec++;
                    String strTime = "";
                    if (timeSec <60) {  // 1分钟以下情况
                        strTime = timeSec + "秒";
                    } else if (timeSec <3600) {  // 1小时以下情况
                        int minutes = timeSec / 60;
                        int secOnd= timeSec % 60;
                        strTime = minutes + "分" + second + "秒";
                    } else {
                        int hours = timeSec / 3600;
                        int minutes = (timeSec - hours * 3600) / 60;
                        int secOnd= timeSec % 60;
                        strTime = hours + "时" + minutes + "分" + second + "秒";
                    }
                    mTimeCount.setText("运行时长:" + strTime);
                    tvWebHour.setText("设备时间" + getTime(1) + "时"+getTime(2)+"分"+getTime(3)+"秒");
            }
            super.handleMessage(msg);
        }
    };

    public class TimeThread implements Runnable {

        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                    Message message = new Message();
                    message.what = 1;
                    timeHandler.sendMessage(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public void connectWifi() {
        WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
        if (!wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(true);
        }
    }

    final Handler loadHandler = new Handler() {
        public void handleMessage(Message msg) {

            switch (msg.what) {
                case 1:
                    if (loadMode == 1) {    // 顺序加载
                        if (count = urlArray.length) {
                            count = 0;
                        }
                        reverseCount = urlArray.length - 1 - (count++);
                        webPath = urlIndex + urlArray[reverseCount];
                    } else { // 默认:随机加载
                        count = new Random().nextInt(urlArray.length);     // 0到(urlArray.length-1)
                        if (getTime(3) % 5 == 0) {// 如果当前秒数对5求余为0,则加载最近5篇
                            count = (urlArray.length - 5) + new Random().nextInt(5); // 0到4,加上
                        }
                        webPath = urlIndex + urlArray[count];
                    }
                    keepScreenOn(Main.this, true);
                    loadBlog(webPath);
                    break;
                case 2:
                    tvState.setText("Network Error");
                    keepScreenOn(Main.this, false);
                    /*
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    connectWifi();
                    */
                    break;
            }
            super.handleMessage(msg);
        }
    };

    public class loadThread implements Runnable {

        @Override
        public void run() {
            while (true) {
                if (isNetworkConnected(Main.this)) {
                    try {
                        webHour = getTime(1);

                        if (webHour <0 || webHour > 24) {
                            webHour = 8;
                        }
                        if (webHour >= 23 || webHour <7) { // [0,7) AND [23,0)
                            int randomId = 1 + new Random().nextInt(3);     // 1-3
                            mTimeHint.setText("延时" + randomId + "分");
                            Thread.sleep(randomId * 60000);
                        } else if ((webHour >= 8 && webHour <= 12) || (webHour >= 14 && webHour <= 18)) {
                            int randomId = 1 + new Random().nextInt(3);     // 1-3
                            mTimeHint.setText("延时" + randomId + "秒");
                            Thread.sleep(randomId * 1000);
                        } else {
                            int randomId = 1 + new Random().nextInt(3);     // 1-3
                            mTimeHint.setText("延时" + (2 * randomId) + "秒");
                            Thread.sleep(randomId * 2000);
                        }
                        Message message = new Message();
                        message.what = 1;
                        loadHandler.sendMessage(message);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    Message message = new Message();
                    message.what = 2;
                    loadHandler.sendMessage(message);

                }
            }
        }
    }

    public int getTime(int type) {
        Date date = new Date();
        if (type == 1) {
            return date.getHours();
        } else if (type == 2) {
            return date.getMinutes();
        } else if (type == 3) {
            return date.getSeconds();
        } else {
            return 0;
        }
    }

    private void loadBlog(String path) {
        mWebView.loadUrl(path);
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // return super.shouldOverrideUrlLoading(view, url);
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                // 截取URL的八位ID
                String subString = url.toString().substring(
                        url.toString().length() - 8, url.toString().length());
                super.onPageFinished(view, url);

                if (!subString.equals(urlArray[urlArray.length - 1])) { // 是否是数组最后一个元素
                    realCount++;
                    if (loadMode == 2) {
                        tvState.setText("页面" + (reverseCount + 1) + "/" + urlArray.length + "--" + subString
                                + "加载完毕,成功加载了" + realCount + "个页面");
                    } else {
                        tvState.setText("页面" + count + "/" + urlArray.length + "--" + subString
                                + "加载完毕,成功加载了" + realCount + "个页面");
                    }
                    if (isLimit && (realCount >= limitCount)) {
                        ExitApp(tvState);
                    }
                } else {
                    realCount++;
                    if (loadMode == 2) {
                        tvState.setText("页面" + (reverseCount + 1) + "/" + urlArray.length + "--" + subString
                                + "加载完毕,成功加载了" + realCount + "个页面");
                    } else {
                        tvState.setText("页面" + count + "/" + urlArray.length + "--" + subString
                                + "加载完毕,共加载了" + realCount + "个页面");
                    }
                }
            }

            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                super.onReceivedError(view, errorCode, description, failingUrl);
                Log.e("CSDN", "" + errorCode + description);
                tvState.setText("加载失败,请稍候再试.");
            }
        });
    }


    public void initModeBtn() {
        // initial Mode Button Text
        if (loadMode == 1) {
            btnChangeMode.setText("顺序模式");
        } else if (loadMode == 2) {
            btnChangeMode.setText("倒序模式");
        } else if (loadMode == 3) {
            btnChangeMode.setText("随机模式");
        }
    }

    public void ExitApp(View view) {
        keepScreenOn(Main.this, false);
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    public void showHide(View view) {
        if (mWebView.getVisibility() == View.GONE) {
            mWebView.setVisibility(View.VISIBLE);
            btnShowHide.setText("隐藏");
        } else if (mWebView.getVisibility() == View.VISIBLE) {
            mWebView.setVisibility(View.GONE);
            btnShowHide.setText("显示");
        }
    }

    public void setLimit(View view) {
        if (etLimit.getText().toString() != null && etLimit.getText().toString().trim().length() > 0) {
            limitCount = Integer.parseInt(etLimit.getText().toString());
        }
        if (limitCount <0) {
            limitCount = 0;
        }
        if (limitCount == 0) {
            isLimit = false;
            tvLimit.setText("限制规则:不限制");
        } else if (limitCount > 0) {
            isLimit = true;
            tvLimit.setText("限制规则:加载" + limitCount + "个页面后退出");
        }
    }

    public void changeMode(View view) {
        if (loadMode == 1) {
            loadMode = 2;
            btnChangeMode.setText("倒序模式");
        } else if (loadMode == 2) {
            loadMode = 3;
            btnChangeMode.setText("随机模式");
        } else if (loadMode == 3) {
            loadMode = 1;
            btnChangeMode.setText("顺序模式");
        }
    }

    // 网络状态
    public boolean isNetworkConnected(Context context) {
        if (context != null) {
            ConnectivityManager mCOnnectivityManager= (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager
                    .getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

    public static void keepScreenOn(Context context, boolean on) {
        if (on) {
            if (wakeLock == null) {
                PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
                wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "==KeepScreenOn==");
                wakeLock.acquire();
            } else {
                Log.e("ZMS", "WakeLock Already On");
            }
        } else {
            if (wakeLock != null) {
                wakeLock.release();
                wakeLock = null;
            }
        }
    }

    public String[] urlArray = new String[82]; // ##### Modify Me #####

    // ##### Modify Me #####
    public void initUrl() {
        urlArray[81] = "42245481"; // 2014-12-29 21:22
        urlArray[80] = "42192861"; // 2014-12-27 14:40
        urlArray[79] = "42149731"; // 2014-12-25 17:49
        urlArray[78] = "42127681"; // 2014-12-24 19:59
        urlArray[77] = "42110329"; // 2014-12-23 21:51
        urlArray[76] = "42085939"; // 2014-12-22 21:14
        urlArray[75] = "42042547"; // 2014-12-20 14:25
        urlArray[74] = "42023747"; // 2014-12-19 09:11
        urlArray[73] = "42001049"; // 2014-12-18 09:02
        urlArray[72] = "41982749"; // 2014-12-17 17:42
        urlArray[71] = "41964147"; // 2014-12-16 18:45
        urlArray[70] = "41909621"; // 2014-12-13 14:03
        urlArray[69] = "41898205"; // 2014-12-12 19:55
        urlArray[68] = "41852845"; // 2014-12-11 15:56
        urlArray[67] = "41807913"; // 2014-12-08 19:55
        urlArray[66] = "41787113"; // 2014-12-07 13:58
        urlArray[65] = "41773471";
        urlArray[64] = "41751259";
        urlArray[63] = "41674841";
        urlArray[62] = "41651909";
        urlArray[61] = "41623903";
        urlArray[60] = "41593769";
        urlArray[59] = "41577725";
        urlArray[58] = "41559167";
        urlArray[57] = "41515985";
        urlArray[56] = "41493939";
        urlArray[55] = "41452531";
        urlArray[54] = "41444931";
        urlArray[53] = "41378661";
        urlArray[52] = "41310305";
        urlArray[51] = "41276657";
        urlArray[50] = "41039497";
        urlArray[49] = "41006711";
        urlArray[48] = "41006711";
        urlArray[47] = "40897455";
        urlArray[46] = "40865095";
        urlArray[45] = "40817269";
        urlArray[44] = "40779347";
        urlArray[43] = "40737065";
        urlArray[42] = "40677441";
        urlArray[41] = "40648971";
        urlArray[40] = "40614011";
        urlArray[39] = "40580995";
        urlArray[38] = "40544365";
        urlArray[37] = "40507193";
        urlArray[36] = "40423803";
        urlArray[35] = "40227437";
        urlArray[34] = "40160843";
        urlArray[33] = "40082987";
        urlArray[32] = "40051331";
        urlArray[31] = "40021129";
        urlArray[30] = "39997481";
        urlArray[29] = "39973739";
        urlArray[28] = "39936867";
        urlArray[27] = "39897617";
        urlArray[26] = "39862237";
        urlArray[25] = "39834141";
        urlArray[24] = "39777229";
        urlArray[23] = "39759943";
        urlArray[22] = "39741221";
        urlArray[21] = "39722311";
        urlArray[20] = "39700219";
        urlArray[19] = "39674051";
        urlArray[18] = "39645901";
        urlArray[17] = "39618057";
        urlArray[16] = "39585513";
        urlArray[15] = "39558107";
        urlArray[14] = "39527977";
        urlArray[13] = "39502685";
        urlArray[12] = "39480497";
        urlArray[11] = "39454145";
        urlArray[10] = "39454145";
        urlArray[9] = "39434451";
        urlArray[8] = "39401061";
        urlArray[7] = "39377419";
        urlArray[6] = "39346957";
        urlArray[5] = "39323633";
        urlArray[4] = "39296439";
        urlArray[3] = "39274019";
        urlArray[2] = "39257041";
        urlArray[1] = "39234287";
        urlArray[0] = "39210795";
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            // ToDo:Setting Menu
            Toast.makeText(Main.this, "ToDo", Toast.LENGTH_SHORT).show();
            return true;
        } else if (id == R.id.action_exit) {
            ExitApp(tvState);
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        keepScreenOn(Main.this, false);
    }

    @Override
    protected void onResume() {
        // ToDo:Keep Screen Always On When Running
        super.onResume();
    }
}



Android一组WebView的随机,顺序,倒序加载


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
拉扯作乱_991
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有