首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在主线程上调用ConnectivityManager的requestNetwork()安全吗?

在主线程上调用ConnectivityManager的requestNetwork()是不安全的。主线程是应用程序的UI线程,负责处理用户交互和界面更新等任务。如果在主线程上执行耗时操作,如网络请求,会导致界面卡顿、无响应甚至ANR(Application Not Responding)的问题。

ConnectivityManager的requestNetwork()方法用于请求网络连接,它需要进行网络状态的检查和相关的网络操作,这些操作可能会耗时较长。如果在主线程上调用该方法,会阻塞主线程的执行,导致界面无法响应用户的操作,给用户带来不好的体验。

为了避免在主线程上执行耗时操作,可以将网络请求放在子线程中进行。可以使用线程、Handler、AsyncTask等方式来实现异步操作。这样可以保证主线程的流畅运行,同时也能够完成网络请求的任务。

推荐腾讯云相关产品:腾讯云移动推送(https://cloud.tencent.com/product/tpns)可以实现消息推送功能,适用于移动应用开发中的消息通知需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面试官问:静态变量、实例变量JVM内存区域是怎么布局线程安全

​面试题: 面试官问:静态成员变量、实例变量JVM内存区域是怎么布局线程安全? 01 面试官心理 首先这道题面试官考察你是变量JVM内存区域布局你清楚?...其次我们假设在多线程高并发场景下这几个变量有没有线程安全问题? 比如静态成员变量,你认为多线程场景下对同一个静态变量值修改,是线程安全?...02 我们循序渐进分析 ​首先看下这张手绘变量图Java版 首先:我们知道当我们本地跑main方法进行单测时候,主线程调用到main方法时会在JVM虚拟机栈空间内创建一个栈帧数据结构。...03 线程安全 什么是线程安全问题: 当多个线程对同一个对象中资源(实例变量、静态变量)进行操作时候,会出现值被更改、值不同步情况,进而影响程序执行流程。 1)类实例变量线程安全?...同一份实例变量,如果被多个线程并发修改时候就会出现线程安全问题。 2)位于方法区静态变量,因为方法区本身被所有线程共享而且变量也只有一份,所以在这里存放值也是线程安全

63910

WLAN 感知概览(Wi-Fi Aware)

要设置客户机-服务器连接,请执行以下操作: 使用Wi-Fi感知发现发布服务(服务器)和订阅服务(客户端上)。 一旦订阅服务器发现发布服务器,请从订阅服务器向发布服务器发送消息。...ConnectivityManager发布服务器使用WifiAwareNetworkSpecifier请求支持Wi-Fi网络,指定从订阅服务器发送消息中获取订阅服务器发现会话和PeerHandle...connMgr.requestNetwork(networkRequest, callback);` 使用与发布服务器相同方法订阅服务器请求Wi-Fi感知网络创建NetworkSpecifier...一旦订阅服务器上调用onAvailable()方法,就可以使用网络对象打开一个套接字以与发布服务器服务器套接字通信,但您需要知道服务器套接字IPv6地址和端口您可以从onCapabilitySchanged...要启用地理围栏,发布服务器和订阅服务器都必须采取以下操作: 发布服务器必须使用setRangingEnabled(true)已发布服务启用范围设置。

2.9K20
  • 正确使用IntentService姿势

    开发安卓应用过程中,我们经常需要这样场景:希望APP不影响当前用户操作前提下,在后台默默做一些任务。比如:静默下载文件或者上传数据。我们一般会考虑到新启一个线程去做异步操作。.... 1.优点 本质IntentService也是开了一个线程,但是IntentService是继承自Service,所以根据Android系统Kill Application机制,使用IntentService...既然IntentService是Service里开启线程去做任务处理,那我直接在Service里启动线程去做不就好了吗?...我们看下IntentService源码: 1 // 首先呢ServiceonCreate生命周期中创建了一个子线程Handler 2 @Override 3 public...因为只有handleMessage方法调用后才会调用onHandleIntent方法去处理任务。那么IntentService在哪里去调用HandlerhandleMessage方法呢?

    2.2K20

    Carson带你学Android:检测网络状态&监听网络变化

    前言 Android开发中,许多功能需要网络连接,所以开发过程中需要进行手机网络检测 今天,我将教大家如何进行网络状态检测和监听网络状态变化 Carson带你学Android系列文章 Carson...对象对应NetworkInfo对象 NetworkInfo对象包含网络连接所有信息 根据需要从NetworkInfo对象取出关于网络连接信息 1.2 特别注意 由于API23及以上时,getNetworkInfo...(Network network); 所以检测网络状态时需要分版本进行检测 1.3 具体检测代码 //检测当前网络状态 //API版本23以下时调用此方法进行检测 //因为API23后getNetworkInfo...:" + isWifiConn); tv_Network_state.setText("移动数据是否连接:" + isMobileConn); } // API 23及以上时调用此方法进行网络检测...// getAllNetworks() API 21后开始使用 //步骤非常类似 public void checkState_23orNew(){ //获得ConnectivityManager

    1.4K10

    单例模式-全局可用 context 对象,这一篇就够了

    单例模式各个方面都有着极为广泛使用,所谓单例,顾名思义就是整个程序中只有一个该类实例,所以它成功保证了整个程序生命周期内该类对象只能创建一次,并且提供全局唯一访问该类方法:getInstance...() ---- 使用 关于单例模式主要分为两类: 懒汉模式 饿汉模式 由于饿汉模式是线程安全,所以通常情况下,我们都尽量采用饿汉模式,具体原因常见这位大佬博文:点击前往 本文主要结合 Android...外界调用时,将全局 context 对象传入 public static void init(Context context){ if (instance !...public AppContext(Context application){ this.applicationContext = application; } ---- 完整代码 之前基础...大家可以在此基础加以改造使用,如果有其他应用场景,欢迎评论区中分享,一起进步~!

    1.1K10

    微信小程序 之 网络请求、数据解析、页面渲染、动态参数

    现在你模拟器就什么都没有了,那么初始准备就做好了。...location=beij&key=d4a619bfe3244190bfa84bb468c14316 这里有两个参数,一个是location,一个是key(这个key也是我自己和风申请)。...这里返回是JSON,现在开发中常规使用方式。 二、网络请求 下面先进行网络请求,比如我页面上添加一个按钮,点击之后调用一个函数,函数里面进行网络请求。那么现在思路很明确了,开始实践。...微信小程序中网络请求都是异步,也就是说新开了一个线程去进行网络请求,所以它和你当前页面交互时,首先你要得到当前页面,然后才能去设置页面的数据变动。...}) }, 然后点击按钮时触发requestNetwork函数,在里面对网络请求进行一个配置,配置请求参数时候通过this.data.city就得到了city变量值,然后就会拼接到url后面

    1.9K30

    android 监听网络状态变化及实战

    版权声明:本文为博原创文章,未经博允许不得转载。...这样确实能减少代码量,但是每次都要主动去获取,这样是不是挺麻烦。实际,google 早就帮我们封装好了,在网络状态变化情况下会发出广播,我们只需要监听广播就好了 。...我们应用之所以要监听网络状态 变化,主要是为了错误情况下方便进行处理,退出我们当前应用之后当然不需要监听了,所以选择动态注册广播。...第一种方法,只不过 API23时候已经 过时了 State wifiState = null; State mobileState = null; ConnectivityManager cm =...效果图如下 我们可以看到开启智能无图情况下,若不是连接WiFi ,我们是不会去加载网络图片。 ?

    4.7K11

    Android 当点击飞行模式都发生了什么?

    今天中午午休时,我把手机开飞行模式了,能看到 WiFi 、蜂窝数据和蓝牙都关闭了,心想,这时候还能收到短信?顺着好奇心,我们不妨来研究一下源码,看看点击飞行模式都发生了什么?...mgr.setAirplaneMode(enabled); } //省略其他代码 } 接下来调用 ConnectivityManager#setAirplaneMode...经过查找,ACTION_AIRPLANE_MODE_CHANGED 广播接受有好几次,,而手机开启或关闭飞行模式时,主要是开启或关闭 Radio 无线通信,其处理逻辑 PhoneGlobals 类中。...Radio 是无线通信模块驱动程序,负责网络通信。...GsmCdmaPhone#setRadioPower,调用 mSST.setRadioPower,最终由 mSST 对象向 RIL 对象发起关闭或开启 Radio 无线通信模块请求,这里就不细看了,

    1.6K10

    Android开发 经验技巧汇总(基于Android Studio)(二)

    先在Activity里面调用getAssets() 来获取AssetManager引用; 再用AssetManageropen(String fileName, int accessMode) 方法则指定读取文件以及访问模式就能得到输入流...: 如果你需要将如图所示apks下文件复制到SD卡app/apks目录下,则这样调用: FileUtils.getInstance(Context context).copyAssetsToSD...; } } (3)运行 常用运行方法有三种: ①直接点击函数右边三角符号; ②.java文件右键,选择Run; ③点击工具栏三角符号。 如下图所示 ?..."/> 然后判断: ConnectivityManager cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE...APP包名以及目标Activity路径,这种情况就建议使用第二种方式,这种方式就无需目标Activity注册标签中加入action 和 category标签了。

    1.3K20

    Android 5.0 API新增和改进

    不过,Dalvik 运行部分技术 ART 无法运行。要了解最重要问题,请参阅 Android 运行时 (ART) 验证应用行为。...请务必将通知公开程度设置为 VISIBILITY_PUBLIC,将通知标为安全通知,以便在任何锁定屏幕(安全屏幕或其他屏幕)显示。有关详情,请参阅锁定屏幕显示通知。...用户可以通过“设置”来选择是否允许安全锁定屏幕显示敏感通知内容。 您应用可以控制其通知安全锁定屏幕显示时具体公开程度。...您现在可以通过新 MediaController 类构建您自己媒体控制器应用。此类提供了一种线程安全方法,可让您通过自己应用界面流程来监控媒体播放。...要扫描合适网络,请调用 requestNetwork() 或 registerNetworkCallback(),并传入 NetworkRequest 对象和一个ConnectivityManager.NetworkCallback

    1.7K20

    【Android 电量优化】JobScheduler 相关源码分析 ( ConnectivityController 底层源码分析 | 构造函数 | 追踪任务更新 | 注册接收者监听连接变化 )

    schedule 方法底层调用 : 该方法最终调用是 JobSchedulerService 中 int schedule(JobInfo job, int uId) 方法 schedule 方法中调用了...scheduleAsPackage 方法 scheduleAsPackage 方法中调用了 startTrackingJob 方法 startTrackingJob 中 , 调用了每个 StateController...连接控制器引入 ---- 一篇博客中 JobSchedulerService 中最终 startTrackingJob 方法中 , 调用了 StateController 控制器 maybeStartTrackingJobLocked...广播 , 这是监听网络状态改变发出广播 ; // 注册广播接收者 , 接收 ConnectivityManager.CONNECTIVITY_ACTION 广播 , 这是监听网络状态改变发出广播...int uid 参数含义 : 更新该 uid 对应任务 , 如果传入 -1 那么就是更新所有的被追踪任务 ; 该方法中 , 遍历所有的被监听任务集合 , ArrayList mTrackedJobs

    28500

    《移动互联网技术》第八章 消息与服务:掌握不同类型广播监听方式,以及创建通知方法

    :第一,广播数据被截获可能存在安全问题;第二,应用程序可能收到大量垃圾消息。...(3) Handler和AsyncTask****工作流程 Handler 活动MainActivity中,首先启动一个子线程来完成一些耗时运算或I/O处理,比如执行大数据运算、下载多个图片文件、...活动中创建handler对象,构造一个handleMessage函数来处理子线程发来消息。根据接收到消息类别来完成相应工作,比如在界面上显示运算完成进度。...首先,自定义线程类TaskThread,然后重写run函数,并且主程序中创建TaskThread线程对象,然后调用start函数启动线程。...在下面的例子中,界面MainActivity创建了一个线程线程完成一个耗时运算,接下来要把运算结果显示界面上,如果直接在线程调用textView.setText函数,这时Android系统会报错

    9810

    Android开发笔记(四十二)Broadcast生命周期

    ,所以接收者首先要自行过滤符合条件,然后才能进行解包处理; 4、通常情况下,Activity和Service都是在线程内部通信,而Broadcast既可用于线程内通信,也可用于线程间通信,还能用于进程间通信...Adapter代码间通信; 2、适用于不同线程之间通信,虽然线程间通信可使用Thread+Handler、AsyncTask等方式,但是广播适应面显然更广,Android总线通信框架EventBus...就是基于Broadcast来构建; 3、适用于不同进程之间通信,既可用于不同APP之间通信,也可用于系统与APP之间通信; Broadcast调用 广播调用方法 sendBroadcast...方法中注销 进程内广播与进程间广播 如果广播是应用之内使用,即不需要跨进程,可以考虑使用LocalBroadcastManager,因为这样更有效率(不需要跨进程通信),而且不用考虑广播开放造成安全问题...它与静态注册区别在于:静态注册receiver代码是单独java文件,而嵌套注册receiver代码是嵌入某个java类中,所以注册时要在receiver类名前加上“属类名$”。

    1.9K50

    Android开启热点后作为路由器,获取AP端IP地址

    手机联网时,就会被分配一个IP地址,它在开启热点时,它本身作为一个“路由器”也会生成一个IP地址,我们需要就是后面这个IP地址,目前论坛上关于手机IP地址帖子都是获取手机被分配IP地址。...我解决这个问题时参考了蓝牙配置IP地址,函数是configureBtIface(),/frameworks/base/services/core/java/com/android/server/connectivity...AP端IP地址函数,主要就是把蓝牙那边参数改成了wlan0,就ok了。...Android8.0以及之前这个IP地址是固定,好像是"192.168.43.1"。9.0以后随机分配,可能是为了安全吧。...configuring interface :" + e); return null; } return address; } 这里贴上Android9.0开启热点时分配

    3.1K10
    领券