专栏首页云深之无迹开发者选项详解

开发者选项详解

在设置页面,大家可能看到过这个页面,开发者选项

打开以后发现是一堆比较唬人得东西


然后不可免得去想,这个东西是什么,有什么用.这篇文章就是来解决这些个问题得.

整篇文章并没有一个清晰的脉络,更多的是一种补充,请各位看官知晓~

启用开发者选项和 USB 调试。

图 1.开发者选项

在 Android 4.1 及更低版本上,开发者选项屏幕在默认情况下处于启用状态。在 Android 4.2 及更高版本上,您必须启用此屏幕。要启用开发者选项,请点按版本号选项 7 次。您可以在以下位置之一找到此选项,具体取决于您的 Android 版本:

  • Android 9(API 级别 28)及更高版本:设置 > 关于手机 > 版本号
  • Android 8.0.0(API 级别 26)和 Android 8.1.0(API 级别 26):设置 > 系统 > 关于手机 > 版本号
  • Android 7.1(API 级别 25)及更低版本:设置 > 关于手机 > 版本号

开发者选项屏幕顶部,您可以开启或关闭这些选项(图 1)。您可能希望此设置处于开启状态。关闭后,除了那些不需要在设备与开发计算机之间通信的选项外,大部分选项都会被停用。

您需要先启用 USB 调试,以便 Android Studio 和其他 SDK 工具能够在设备通过 USB 连接时识别设备,然后才能使用调试程序和其他工具。要启用 USB 调试,请在开发者选项菜单中开启 USB 调试选项。您可以在以下位置之一找到此选项,具体取决于您的 Android 版本:

  • Android 9(API 级别 28)及更高版本:设置 > 系统 > 高级 > 开发者选项 > USB 调试
  • Android 8.0.0(API 级别 26)和 Android 8.1.0(API 级别 26):设置 > 系统 > 开发者选项 > USB 调试
  • Android 7.1(API 级别 25)及更低版本:设置 > 开发者选项 > USB 调试

常规选项

在 Android 8.0 及更高版本上,您可以点按快捷设置开发者图块,将选定的开发者选项添加到“快捷设置”面板上。选择一个或多个可用图块(图 2)后,打开“快捷设置”面板,并点按铅笔图标以进入修改模式。然后,将开发者图块从图块窗格拖动到“快捷设置”面板上,并再次点按铅笔图标以退出修改模式。

图 2. 添加到“快捷设置”面板

其他常规选项包括:

  • 内存:(在 Android 8.0 及更高版本上)显示内存统计信息,如平均内存使用率、内存性能、可用总内存、已使用的平均内存、可用内存量以及应用占用的内存量。
  • 生成错误报告:获取当前设备日志文件的副本以与某人共享。当您获得错误报告已准备就绪的通知时,点按此通知即可共享。
  • 系统界面演示模式:显示不含通知或电池电量过低警告的通用预设通知栏,更轻松地截取整洁的屏幕截图。借助启用演示模式,可以使用 adb 演示模式命令更改状态栏的外观。或者,您也可以使用显示演示模式隐藏通知和显示预设状态栏。
  • 桌面备份密码:设置备份密码,以便您可以使用 adb 命令备份和恢复受密码保护的设备应用与数据。
  • 不锁定屏幕:将屏幕设为在每次插入电源时保持唤醒状态。
  • 启用蓝牙主机控制器接口 (HCI) 信息收集日志:捕获存储在 /sdcard/btsnoop_hci.log 路径下的文件中的所有蓝牙 HCI 数据包。您可以检索这些数据包,然后使用诸如 Wireshark 之类的程序分析信息和排查问题。
  • 启用演示模式
adb shell settings put global sysui_demo_allowed 1
https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/docs/demo_mode.md

系统界面演示模式:让截图中的状态栏更整洁

无论是出于整洁美观的需要,还是出于保护自身隐私的需要,在分享自己的手机截图、录屏,尤其是为文章内容配图时,我都希望能够提供一片干净整齐、没有信息干扰的状态栏。

进入「系统界面演示模式」并将其中的两项开关都打开,状态栏就会立刻切换到没有任何通知、系统图标也固定不变的演示状态。在此状态下,快捷操作面板中的 Wi-Fi 名称也会改为 DemoMode,防止泄露隐私。

调试

图 3. 已启用调试选项

调试选项提供了配置设备端调试以及在设备与开发计算机之间建立通信的方式。

可以启用 USB 调试(图 3),以便 Android 设备可以通过 Android 调试桥 (adb) 与开发机器通信。等待调试程序选项仅在您使用选择调试应用选择要调试的应用后才可用。如果您启用等待调试程序,选定的应用会先等待调试程序连接后才会执行操作。

其他调试选项包括:

  • 在设备上永久存储日志记录器数据:选择要在设备上永久存储的日志消息类型。选项包括“关闭”、“全部”、“所有非无线电”和“仅限内核”。
  • 选择模拟位置信息应用:使用此选项可以模拟设备的 GPS 位置,以测试您的应用在其他位置时行为是否相同。要使用此选项,请下载并安装 GPS 模拟位置应用。

图 4. 视图属性

  • 启用视图属性检查功能:将视图属性信息保存在 View 实例的 mAttributes 成员变量中,以便将这些信息用于调试。如图 4 所示,可以通过 Layout Inspector 界面访问属性信息(如果不启用此选项,“属性”项将不可用)。
  • https://developer.android.com/studio/debug/layout-inspector?hl=zh-CN
  • 启用 GPU 调试层:在运行 Android 9(API 级别 28)及更高版本的设备上可用,启用此选项可允许从本地设备存储加载 Vulkan 验证层。

网络

图 5. 选择 USB 配置

网络选项提供了配置 WLAN 和 DHCP 设置的方式。

点按选择 USB 配置可以指定您希望计算机如何识别设备。如图 5 所示,您可以将设备配置为仅限充电、传输文件 (MTP)、传输照片 (PTP)、在 PC 上使用您的移动互联网 (RNDIS),或者传输音频或 MIDI 文件。

点按蓝牙 AVRCP 版本,然后选择要用来控制您的设备有权访问的所有蓝牙 A/V 设备的配置文件版本。此外,要微调设备上的音频播放功能,请点按并设置以下选项:

  • 蓝牙音频编解码器:选择以下某个编解码器来调整设备的音质(编解码器):
    • SBC:将数据传输到蓝牙音频输出设备,如头戴式耳机和音响设备。
    • AAC:在比特率相似的情况下,有线设备比 MP3 的音质更好。
    • aptX:使用优质智能手机、音响设备、条形音箱、头戴式耳机和平板电脑提供纯正的无线声音。
    • aptX HD:为蓝牙设备提供高分辨率流式传输。
    • LDAC:通过无线连接提供优质的音乐聆听服务。
    • 启用可选编解码器停用可选编解码器:如果您已经安装了其他编解码器实现,可以使用这两个选项启用和停用这些实现。
  • 蓝牙音频采样范围:通过选择音频编解码器采样率来调整每秒音频样本数量。采样率越高,使用的资源越多。
  • 蓝牙音频每样本位数:设置每个音频样本中信息的位数。比特率越高,音质越好,但样本文件越大。
  • 蓝牙音频声道模式:选择单声道或立体声。
  • 蓝牙音频 LDAC 编解码器:优化声音以提高音质,平衡音频和连接质量,提高连接质量,或者使用自适应比特率平衡音频和连接质量。

以下列表介绍了配置 WLAN 和 DHCP 设置的其他方式:

  • 无线显示认证:启用高级配置控件和设置,按照“WLAN 联盟 WLAN 显示规范”中明确规定的规范进行无线显示认证。此认证适用于 Android 4.4(API 级别 19)及更高版本。
  • 启用 WLAN 详细日志记录功能:根据您连接到的每个无线网络 (SSID) 的相对接收信号强度 (RSSI) 提高其 WLAN 日志记录水平。
  • 主动从 WLAN 网络切换到移动数据网络:当信号较弱时,让 WLAN 更高效地将数据连接移交给移动数据网络。

输入

图 6. 指针位置

启用显示点按操作反馈可以在您轻触屏幕时显示点按操作反馈。手指或触控笔下会出现一个圆圈,这个圆圈会跟着您在屏幕上移动。当您在设备上录制视频时,点按的作用就像指针一样。

启用指针位置可以用十字准线在设备上显示指针(点按)位置。屏幕顶部会显示一个条形,用于跟踪十字准线坐标(图 6)。在您移动指针时,该条形中的坐标会跟踪十字准线位置,且屏幕上会绘制出指针路径。

显示点按操作反馈:让录屏中的操作更直观

手机屏幕如此大,在录屏为他人演示具体操作其实有点不现实——别人很难清楚你点击了哪里。在录屏的时候发现会显示手指的触摸位置,使得录屏时的具体操作更为直观。其实这个功能就是调用了原生 Android 开发者选项中的「显示点按操作反馈」。

启用显示点按操作反馈可以在手指/触控笔触摸屏幕时显示一个白色的小圆圈,这个小圆圈会跟随手指在屏幕上移动。在手机上录屏时,这个小圆圈的作用就像鼠标指针一样,起到一个展示具体操作的作用。

绘制

图 7. 界面结构

绘制选项提供了有关应用界面及其操作方式的视觉提示。

启用显示布局边界可以显示应用的裁剪边界、外边距和设备上的其他界面结构,如图 7 所示。

其他绘制选项包括:

  • 强制使用从右到左的布局方向:强制屏幕布局方向为从右到左 (RTL) 或从左到右(默认设置)。
  • 窗口动画缩放:设置窗口动画播放速度,以便您查看不同速度下的性能。缩放越小,速度越快。
  • 过渡动画缩放:设置过渡动画播放速度,以便您查看不同速度下的性能。缩放越小,速度越快。
  • 模拟辅助显示屏:以叠加层的形式在设备上创建辅助屏幕。这在使用 Presentation API 支持其他屏幕时非常有用。
  • 硬件加速渲染
  • 图 8. 绿色弱视颜色空间(我也找不到色盲,不知道式什么感觉)
  • 借助硬件加速渲染选项,您可以利用基于硬件的选项(如 GPU、硬件层和多重采样抗锯齿 (MSAA))针对目标硬件平台优化应用。
  • 点按模拟颜色空间可以更改整个设备界面的配色方案。此设置下面的选项是指色盲类型。包括“已停用”(无模拟配色方案)、“全色盲”(黑色、白色和灰色)、“绿色弱视”(红绿不分)、“红色弱视”(红绿不分)和“蓝色弱视”(蓝黄不分)。其中“红色弱视”是指红绿色盲,红色弱视;“绿色弱视”(图 8 所示)是指红绿色盲,绿色弱视。
  • 如果您在模拟颜色空间中截取屏幕截图,它们会正常显示,如同没有更改配色方案。
  • 利用基于硬件的选项的一些其他方式包括:
  • 设置 GPU 渲染程序:将默认的 Open GL 图形引擎更改为 Open GL Skia 图形引擎。
  • 强制进行 GPU 渲染:如果应用编写时在默认情况下不进行 GPU 渲染,强制应用使用 GPU 绘制 2D 图形。
  • 显示 GPU 视图更新:显示使用 GPU 绘制的任何屏幕上的元素。
  • 调试 GPU 过度绘制:显示设备上的颜色编码,以便您可视化相同像素在同一帧中绘制的次数。可视化会显示您的应用可能在哪里进行了不必要的渲染。看我其他额文章
  • 调试非矩形剪裁操作:关闭画布上的剪裁区域,创建非常规(非矩形)画布区域。通常,剪裁区域不允许在圆形剪裁区域的边界之外绘制任何图形。
  • 强制启用 4x MSAA:在 Open GL ES 2.0 应用中启用多重采样抗锯齿 (MSAA)。
  • 停用 HW 叠加层:通过使用硬件叠加层,在屏幕上显示内容的每个应用将消耗更少的处理资源。如果不使用叠加层,应用会共享视频内存且必须不断地检查冲突和剪裁区域才能渲染合适的图像。检查工作会消耗大量的处理资源。
  • 媒体
  • 图 9. 竖条表示形式
  • 启用关闭 USB 音频转接可以停用自动路由到通过 USB 端口连接到计算机的外部音频设备。自动路由可能会干扰 USB 感知应用。
  • 监控
  • 监控选项提供了有关应用性能(如长时间的线程和 GPU 操作)的视觉信息。
  • 依次点按 GPU 渲染模式分析在屏幕上显示为竖条,以竖条形式显示 GPU 渲染模式分析(图 9)。如需了解详情,请参阅 GPU 渲染模式分析。
  • 应用
  • 图 10. 设置后台进程限制
  • 应用选项可以帮助您了解应用在目标设备上的运行方式。
  • 点按后台进程限制可以设置后台一次能够运行的进程数量。图 10 中显示了可能的设置。
  • 在测试过程中点按重置 ShortcutManager 速率限制,使后台应用可以继续调用快捷键 API,直到再次达到速率限制。如需详细了解快捷键和速率限制,请参阅 ShortcutManager
  • 启用不保留 Activity 可以在用户离开 Activity 的主视图后立即销毁该 Activity,从而延长电池续航时间。

正在运行的服务:看看是谁在偷吃内存

刚切到后台的应用,再一回看怎么就重载了?这往往是因为剩余可用内存不足惹的祸。用了这么多第三方内存查看工具,没想到最直观的那个藏在开发者选项里:正在运行的服务。

在这个界面下,当前哪些应用的进程正在运行便一目了然,比如常见的启动器、输入法,后台正在执行任务的服务……还有它们占据了多少内存、运行了多久等详细数据。如果某一项服务长期占用了大量内存,点进它的子项我们还能对其进行设置、停用或者是报告。

左:正在运行的服务;右:已被缓存的进程

点击右上角的三个小点,我们还能切换到显示已缓存的后台进程。被缓存的后台进程并不活跃,只是为了方便用户切换、快速启动而被保留在内存里,并不需要我们费心终结。

渲染模式分析:我的手机还流畅跟手吗?

依次点按「HWUI 呈现模式分析」(旧称为 GPU 渲染模式分析)和「在屏幕上显示为竖条」,屏幕下方就呈现出满满的竖条和红黄绿三条水平线(旧版本则只有一条水平绿线)。

左:Android 9 Reno,右:Android 10 Pixel 2

其中每一个竖条都代表一个帧,每个竖条的高度就代表渲染这个帧所耗费的时间。屏幕上每呈现一帧,这个竖条便会不断地刷新 —— 竖条越低则代表越流畅。在只有一条水平绿线的情况下,如果屏幕中的每一个竖条都在这条水平绿线以下,则说明当然的渲染完全满足 60 帧的屏幕刷新率,反之则说明当前遭遇了卡顿。

而在 Android 10 中这个模式出现了三条水平线,这很可能意味着后续将支持更高刷新率的屏幕。

待机应用:限制毒瘤的高级姿势

Android 9 引入了新的电池管理功能应用待机分组(App Standby Buckets),本质其实是对应用资源分配的精细化管理。这个功能会结合机器学习对用户的预测,根据我们使用应用的最近使用频率和总频率来对应用进行分组,决定应用资源分配的优先级,从高到低分别有活跃(ACTIVE)、工作集(WORKINGSET)、常用(FREQUENT)、罕用(RARE)等。

其实我们也能在开发者选项中的「待机应用」一项中手动为应用进行分组,分配四档资源等级,比如将偶尔使用的外卖应用、购票应用等设置为 RARE,节省不必要的资源浪费。

Wi-Fi 扫描调节:为网络分析开路

在 Android 中,第三方应用可以调用 Wi-Fi 扫描功能来获取当然设备能够连接到的 Wi-Fi 列表,但如果对扫描频率不加限制,手机续航可能就会受到影响。

从 Android 8.0 开始 Google 就开始收紧权限,到了 Android 9,哪怕是用户正在使用的前台应用,也只能在 2 分钟内扫描最多四次。

一些专门用来分析 Wi-Fi 网络的第三方工具应用,比如 Wi-Fi Analyzer 的实用性因此大打折扣,在用户的不断反馈下,Android 10 的开发者选项里终于新增了「Wi-Fi 扫描调节」开关,关闭后就可以允许应用任意扫描。

此项选项默认开启,有测试 Wi-Fi 网络需要的用户可以手动关闭。

动画缩放速度

手机窗口和操作界面的一些炫酷的动画效果,可以给人带来视觉上的享受,不过为此我们也得付出一定的代价,那就是这不可避免地会影响手机的运行速度。如果你觉得手机运行速度于你来说更为重要,而动画效果可有可无,那么可以将手机的动画缩放数值调至最低甚至关闭。

在“开发者选项”当中,可以看到三个连在一起的选项分别是“窗口动画缩放”、“过渡动画缩放”和“动画程序时长调整”,分别点击进入都可以看到有关闭动画及动画缩放不同数值的选项,将这三个选项的动画缩放直接关闭,或者都设置为最低值即动画缩放0.5x。做完这个简单的操作,你会发现,手机运行速度会提高了不少。

强制进行GPU渲染

Android系统应用程序的界面(包括桌面)可以通过CPU或者GPU来进行渲染,但一般是默认由CPU来承担这些工作的。由于GPU在处理图形方面比CPU更快且效果更好,强制使用GPU渲染会充分地利用你手机的GPU,开启该功能之后可以大大降低CPU的使用率,减轻CPU的负担,这样会让Android手机运行一些应用程序时更为流畅。但图形处理从由CPU承担转移到GPU上,手机是保证运行流畅了,但耗能也相应的提升,这就会造成你的手机续航时间将会缩短一些。所以你可以选择只在玩游戏的时候打开这个功能,保证游戏过程的流畅度,平时就选择关闭。

允许模拟地点

打开这个选项可以让你足不出户就能在QQ空间或朋友圈发定位显示自己在世界各地旅游。当然,要改变手机的定位,不仅仅是打开这个功能这么简单,还需要对手机进行root,然后下载一个可以虚拟定位的APP。

不保留活动

打开这个选项,当你从某个应用返回到桌面时,后台会自动清理应用的进程,当你再次打开这个应用时需要重新加载。比如,你在QQ和朋友聊天,直接从聊天页面按home键返回到桌面,这时后台就会清理QQ的进程,当你再点击QQ图标时,进去看到的不再是退出时的和朋友聊天的页面。这有利于清理手机的运行内存,保证手机的运行速度和流畅度,但同时也会影响应用的使用体验,每次退出都要重新加载。

后台进程限制

安卓系统有个毛病就是应用间的关联启动,你打开一个APP时,后台会偷偷地启动其他一些应用进程。比如你打开微信时,后台会自动启动QQ、腾讯手机管家等属于腾讯的APP。有的流氓应用,甚至会关联启动你的手机银行APP,不仅会降低手机的运行速度,而且会威胁到个人数据的安全。这个后台进程限制的选项就可以避免这些情况,你可以设置后台进程的个数,比如你常用的APP是微信和QQ,那你就可以设置为“不得超过2个进程”。

不锁定屏幕

由于通常我们都会进行锁屏设置,所以开发的时候一段时间不用手机就会黑屏,这个选项开启之后,连接手机将不会锁屏。

显示布局边界

进行UI设计中时常会用到,开启之后会显示页面布局的边界和框架,通过这个显示结果我们可以看到没有达到预期效果的布局的问题在哪里,开启之后的效果如下。在一个论坛中偶然看到有人说,可以通过“显示布局边界”来判断这个界面或者某个部位是不是html5实现,我只想说,好机智。

强制进行GPU渲染

这个选项的意思就是强制开启硬件加速。对于用户来讲,开启之后应用会变得流畅,但是由于有些Canvas方法不支持硬件加速,开启之后可能会引起应用crash。

显示GPU视图更新

开启之后可以看到页面会不停闪烁,尤其是滑动页面的时候闪烁更频繁,这就表示闪烁的页面或者View等开启了硬件加速。如果发现某个页面一点闪烁都没有,那就说明这个页面关闭了硬件加速功能。

调试GPU过度绘制

下图是开启这个选项后的效果:

该功能会用几种不同的颜色绘制屏幕,来标识overdraw发生的位置以及程度如何,各种颜色的意义如下: 没有颜色:意味着没有overdraw。像素只画了一次。 蓝色:意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。 绿色:意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。 浅红:意味着overdraw 3倍。像素绘制了四次,小范围可以接受。 暗红:意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。

GPU呈现模式分析

可以选择使用条形图还是线型图显示,选择哪种显示方式显示结果都是类似的。下图是选择条形图后的显示情况:

每列数据显示了渲染每一帧需要的时间,每一条线意味着一帧被绘制出来,而每条线中的不同颜色又代表着在绘制过程中的不同阶段: Draw (蓝色) 代表着View.onDraw()方法。在这个环节会创建/刷新DisplayList中的对象,这些对象在后面会被转换成GPU可以明白的OpenGL命令。而这个值比较高可能是因为view比较复杂,需要更多的时间去创建他们的display list,或者是因为有太多的view在很短的时间内被创建。 Process (红色) – 执行Display list中的内容并创建OpenGL命令。如果有过多或者过于复杂的display list需要执行的话,那么这阶段会消耗较长的时间,因为这样的话会有很多的view被重绘。而重绘往往发生在界面的刷新或是被移动出了被覆盖的区域。 Execute (黄色) – 发送OpenGL命令到GPU。这个阶段是一个阻塞调用,因为CPU在这里只会发送一个含有一些OpenGL命令的缓冲区给GPU,并且等待GPU返回空的缓冲区以便再次传递下一帧的OpenGL命令。而这些缓冲区的总量是一定的,如果GPU太过于繁忙,那么CPU则会去等待下一个空缓冲区。所以,如果我们看到这一阶段耗时比较长,那可能是因为GPU过于繁忙的绘制UI,而造成这个的原因则可能是在短时间内绘制了过于复杂的view。

绿色的横线表示每一帧渲染时间的阈值,值为16ms,这是因为Android流畅运行的帧率为60fps,如果每一帧的渲染时间超过16ms,帧率就降低到小于60fps,会出现丢帧的情况,直观的感受就是页面出现卡顿。如果发现条形图基本上低于绿色的线,说明页面的绘图效率良好,但当条形线频繁的超过绿色的线,应用的布局应该是有问题的,通常都是由于布局不合理或者是太过复杂。通过不同颜色的线所占的比重,可以确定卡顿是由哪个阶段引起的。

不保留活动

开启这个选项表示页面切到后台以后将会被系统销毁,一般用来模拟设备内存不足时后台Activity被销毁的场景。我们可以用它来测试页面重建的稳定性。如果你的应用在开启它时功能基本正常,说明代码设计得比较合理,代码写的足够健壮。这个具体怎么理解呢?

我们知道Activity有一个回调方法onSavedInstanceState()会在页面被切到后台时调用来保存页面的状态,如果页面重新切回前台而且已经被系统销毁的情况下,系统会帮我们重建页面,这个状态通常是很难模拟的。开启这个功能,就可以模拟这个情况,然后进行页面状态恢复的调试。也就是说,如果两个Activity A启动B,B启动后系统销毁了页面A,从B页面再切回来时将会白屏(或者黑屏)一下,这就是系统在重建我们的A页面。如果我们对页面恢复的处理不当,就有可能导致页面的重建出现异常,因为毕竟系统没有智能到帮我们保存所有必要的数据,有些还是需要我们自己手动来保存的。我们在测试中发现,如果将B页面的属性设置为透明,也就是设置主题为android:theme="@android:style/Theme.Translucent",这时候系统并不会销毁A页面,那是因为A页面并没有执行onStop()回调方法。

这个功能只是作为调试辅助开启比较合适,普通用户开启后将严重影响用户体验。

本文分享自微信公众号 - 云深之无迹(TT1827652464),作者:小怼怼

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小程序.我还是不知道起什么名字

    代码会将welcome页面中的所有text组件的字体更改为微软雅黑。那我们思考一个问题,假如现在有100个页面,而100个页面里几乎所有的字体都应该是微软雅黑。...

    云深无际
  • 火狐浏览器持续认识

    无论是网址还是搜索关键字,地址栏都可以处理。Firefox 的统一搜索和地址栏能根据现有的书签、标签、历史、已开标签页和搜索热度给你匹配建议。

    云深无际
  • RoboMaster Assient更新固件

    云深无际
  • 保持简短和重点来优化语音搜索

    黄伟SEO
  • 8个WEB设计错误,我们该如何避免?

    对于web设计而言,相信每一个网页设计师都会有自己不同的观点,但网站是一个综合性的集合体,它有的时候不单单需要考虑页面的美观度,它还需要考量网站的营销属性,网站...

    蝙蝠侠IT
  • Apache的Charset设置

    今天从这篇文章中学习了apache关于defaultcharset的设置和优先级的问题。

    大江小浪
  • 避免回车键导致的页面无意义刷新的解决方法

    在文本框中输入完要搜索的关键字段,按回车结果整个页面刷新了,局部刷新肯定失败。 仔细分析这样的页面一般都满足以下条件: 1、包含FORM表单 2、只有一个文本框...

    DougWang
  • opoa介绍

    一 定义       One Page, One Application(后面缩写为OPOA,或者1P1A), 含义很简单:一个页面就是一个应用。不再使用ifr...

    hbbliyong
  • 本周先行者课程--多级下拉菜单回顾

    各位同学们大家好,又到周末了。这个周末咱们开始讲新的前端组件,多级下拉菜单。这个东西我们以前讲过一次,但因为感觉之前讲的有些不太充分,还是把它再拿出来讲一下。 ...

    web前端教室
  • 算法模板——Dinic网络最大流 2

    实现功能:同Dinic网络最大流 1 这个新的想法源于Dinic费用流算法。。。 在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺...

    HansBug

扫码关注云+社区

领取腾讯云代金券