Android12中使用Settings.ACTION_WIFI_ADD_NETWORKS结合startActivityForResult时应用崩溃
Xamarin Android Android 12添加WiFi配置随机崩溃问题
问题详情
使用Xamarin Android开发,目标框架为Android 12,通过以下代码保存WiFi网络配置时,在Android 12设备上频繁出现随机崩溃,崩溃时VS2022调试器仍保持连接。
代码实现
private void AddWifi(string ssid, string psk) { var suggestions = new List<IParcelable> { new WifiNetworkSuggestion.Builder() .SetSsid(ssid) .SetWpa2Passphrase(psk) .Build() }; var bundle = new Bundle(); bundle.PutParcelableArrayList(ExtraWifiNetworkList, suggestions); var intent = new Intent(ActionWifiAddNetworks); intent.PutExtras(bundle); MainActivity.Instance.StartActivityForResult(intent, RequestCodeConstants.WifiRequestCode); }
日志信息
Visual Studio输出
[DecorView[]] onWindowFocusChanged hasWindowFocus false [tWriterEnhance] Explicit concurrent copying GC freed 119792(5287KB) AllocSpace objects, 5(164KB) LOS objects, 24% free, 5230KB/6974KB, paused 91us,85us total 54.456ms [Activity] PerfMonitor: Slow Operation: Activity com.packagename/crc647e3ada291cd56112.MainActivity onDestroy took 627ms [Choreographer] Skipped 61 frames! The application may be doing too much work on its main thread. [Looper] PerfMonitor doFrame : time=0ms vsyncFrame=0 latency=683ms procState=-1 historyMsgCount=2 (msgIndex=2 wall=671ms seq=47927 late=20ms h=android.app.ActivityThread$H w=159)
Android Studio Logcat日志
getRecentTasks: taskId=925 userId=0 baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.packagename/crc647e3ada291cd56112.MainActivity } 2023-03-09 21:50:10.680 1784-12912 ActivityTaskManager system_server W Force finishing activity com.packagename/crc647e3ada291cd56112.MainActivity 2023-03-09 21:50:11.859 7578-7578 tWriterEnhance com...Inc.packagename I Explicit concurrent copying GC freed 119792(5287KB) AllocSpace objects, 5(164KB) LOS objects, 24% free, 5230KB/6974KB, paused 91us,85us total 54.456ms 2023-03-09 21:50:11.986 7578-7578 Activity com...Inc.packagename W PerfMonitor: Slow Operation: Activity com.packagename/crc647e3ada291cd56112.MainActivity onDestroy took 627ms 2023-03-09 21:50:11.997 1784-12916 InputManager-JNI system_server W Input channel object '22029a1 com.packagename/crc647e3ada291cd56112.MainActivity (client)' was disposed without first being removed with the input manager! 2023-03-09 21:50:12.008 7578-7578 Choreographer com...Inc.packagename I Skipped 61 frames! The application may be doing too much work on its main thread. 2023-03-09 21:50:12.009 7578-7578 Looper com...Inc.packagename W PerfMonitor doFrame : time=0ms vsyncFrame=0 latency=683ms procState=-1 historyMsgCount=2 (msgIndex=2 wall=671ms seq=47927 late=20ms h=android.app.ActivityThread$H w=159) 2023-03-09 21:50:16.005 3068-3393 ActivityManagerWrapper com.miui.home E getRecentTasks: taskId=925 userId=0 baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.packagename
解决方案
- 权限检查与申请:确保已动态申请
ACCESS_FINE_LOCATION、CHANGE_WIFI_STATE、ACCESS_WIFI_STATE权限,Android 12添加WiFi网络需这三项权限,且必须动态获取。 - 替换API:放弃使用
ActionWifiAddNetworksIntent方式,改用Android 12推荐的WifiManager.AddNetworkSuggestionsAPI,该API兼容性更好,能避免系统层面的崩溃问题。 - 上下文优化:避免使用
MainActivity.Instance单例启动Intent,改用当前Activity的上下文(如this或Activity.Current),防止Activity销毁后引用无效上下文导致崩溃。 - 主线程优化:日志显示主线程存在卡顿,将WiFi配置相关操作移至后台线程执行,减少主线程负载。
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

