- Android-悬浮窗功能的实现(附Java、KT实现源码)(1)
egrhef
程序员androidjava开发语言
//获取服务的操作对象valbinder=serviceasFloatWinfowServices.MyBinderbinder.service}overridefunonServiceDisconnected(name:ComponentName){}}overridefunonActivityResult(requestCode:Int,resultCode:Int,data:Intent){
- Android-面试-Jetpack-LiveData-你必须滴知道得知道的那些玩意儿(1)
m0_64603929
程序员面试移动开发android
作者:RicardoMJiang前言阅读本文前,大家可以先思考一些这几个问题:1.LiveData为什么可以自动取消订阅,如何避免内存泄漏?2.LiveData设置相同的值,会不会回调?3.LiveData有什么坑?如何实现LiveDataBus?带着问题学习可以让我们在学习的过程中更加有目的性与条理。例如在读源码的过程中,我们如果从头开始读,往往千头万绪,抓不住要领。而如果在开始读之前先带着几个
- PAG动效简介
东坡大表哥
Android开发android前端动画
文章目录前言一、PAG是什么?特点二、PAG使用流程图三、PAG动效集成环境搭建代码实现三、动效踩过的坑四、相关资源五、参考链接前言互联网产品动效使用越来越多,不管是播间里面的各种礼物道具动效,还是APP各种场景要展示的动画,为了实现理想的效果,反复打磨,都是困扰设计师和开发工程师的一个主要问题。设计要求:加载要快,显示要清晰,体积要小,可扩展性要强,开发要面对:内存占用,CPU占用,屏幕适配等等
- Android-性能优化-ANR-的原因和解决方案
2401_84538474
程序员android性能优化vscode
BroadcastReceiver的事件(onRecieve()方法)在规定时间内没处理完(前台广播为10s,后台广播为60s);Service前台20s后台200s未完成启动;ContentProvider的publish()在10s内没进行完。通常情况下就是主线程被阻塞造成的。2、ANR的实现原理以输入无响应的过程为例(基于9.0代码):最终弹出ANR对话框的位置是与AMS同目录的类AppEr
- 『Android-技能篇』优雅的转场动画之-Transition---掘金技术征文-双节特别篇
2401_84408404
程序员android
相信大家在平常开发也会遇到类似的转场动画,如果想要要实现上图的效果有哪些方式呢?首先分析一下转场过程,我们把起始View分别定义为startView和endView。startView为常见的列表布局,左侧头像和右侧为文本介绍;endView为详情页面,置顶的大图和详细的文本介绍。不难发现,这些元素都是对应关系,只不过起始状态的基本属性不同:头像,位置和大小以及scaleType发生变化背景,颜色
- 【Android】App 屏幕适配方案
宾有为
Androidandroidkotlinandroidstudioautosize适配
自Android智能手机于2008年10月发布至今,已有十几年的历史,在这十几年里,Android版本不断发生变化,搭载Android系统的设备也在不断的发生变化,屏幕的分辨率也从一开始的320x480分辨率到1440x2560分辨率。Android官方似乎一开始就意识到app的适配问题,推出了多达六种的像素单位,不同的单位针对不同的使用场景,分别是:dp、px、sp、pt、mm、in。dp:用于
- 安卓基础面试题
享哥。
android
自定义viewAndroid自定义View-CSDN博客view和viewgroupView和ViewGroup的区别-view的事件分发事件分发详解---历史最容易理解组件化Android-组件化开发什么是ANRAndroidANR详解-CSDN博客Android性能优化Android优化-CSDN博客Aroute原理Arouter框架原理浅解-简书2021年Android面试题汇总(初级)-简
- Android-完美解决EditText和ScrollView的滚动冲突 转载
xiaoerbuyu1233
android
https://blog.51cto.com/u_15073486/3650167publicclassMainActivityextendsActivityimplementsView.OnTouchListener{privateEditTextmEditText;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.on
- Android 屏幕适配方案总结
&岁月不待人&
Android优化android
Android的屏幕尺寸多种多样,如5寸、5.5寸、6寸等等,当然,屏幕分辨率也是多种多样,这很容易导致同一元素在不同手机上显示的效果不同的问题。本文章作为自己项目平时编写中的一些常用屏幕适配总结,方案1,3,4都用过,挺不错的。方案一通过dp加上自适应布局和weight比例布局可以基本解决不同手机上适配的问题,这基本是最原始的Android适配方案。此外,使用相对布局和约束布局我认为会更好的去展
- 安卓屏幕适配-自定义像素适配
migill
1、屏幕适配原因:安卓设备碎片化,导致app的界面元素在不同的屏幕尺寸上显示不一致。目的:让布局,布局组件,资源,用户界面流程,匹配不同屏幕尺存。2、屏幕适配-自定义View原理:以一个特定宽度尺寸的设备为参考,在View的加载过程,根据当前设备的实际像素换算出目标像素,在作用在控件上。1、首先需要得到一个缩放比例如何获取缩放比例呢?需要获取当前手机的宽和高,在与我们设计稿的参考宽高做比。publ
- android-模拟器检测方法
土肥圆的诺诺
系统检测:IMEI等×优点:简单方便缺点:模拟器一般都对这部分进行处理手机号码×手机号码在6.0后需要申请权限,敏感度太高,且不一定获取到。硬件检测电池☆对电池电量,充电状态,温度等一般模拟器对此并未处理,可靠度较高。需要轮询处理,非及时,未来模拟器有可能对此进行修改。mac地址×优点:利用mac地址唯一性缺点:模拟器可以模拟wifi☆优点:连接wifi的情况下,AS模拟器显示『wlan0Link
- 浏览器适配-基础
THINKA
前言很多人刚刚接触电视TV都会问,电视分辨率和手机分辨率有何异同?其实,我想说没有啥区别!可能只有一些事项需要注意!Android的屏幕适配是指适配不同机顶盒UI框架层输出的分辨率和dpi,而不是适配不同分辨率的电视机(电视机的适配交由机顶盒本身完成,和各个应用无关)。androidTV开发经验谈1.在开发上,tv跟androidphone原理基本一样.2.使用singleclick事件就够了.遥
- android 算屏幕密度,Android屏幕适配——多分辨率多屏幕密度
ae1915d
android算屏幕密度
为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容。1.重要概念px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高。屏幕分辨率:指在纵向和横向方向上的像素点数,单位是px,一般显示方式是纵向像素数量*横向像素数量,如1920*1080。屏幕尺寸:一般是屏幕对角线长度,单位是英寸,常见尺寸有3.5,4.0,4.3,4.7,5.0,6.0等。屏
- android平板更换字体大小,史上最简单易懂的Android Pad手机屏幕适配方案
贾秋
android平板更换字体大小
Android屏幕千奇百怪,大小种类繁多。如果要适配所有的Android设备,不懂原理逐一适配的话确实是个吃力不讨好的力气活。下面的文章将分享一种超好用的Android屏幕适配方案,以及屏幕适配种需要注意的事项和适配原理用dp和px的区别大多数手机最小宽度的dp数都是360dp;但是屏幕的分辨率却不尽相同,主流的分辨率(单位px)为:1080x1920,720x1280,480x800等举个例子解
- 屏幕设配介绍
???Sir
ui移动开发
移动开发的屏幕适配是一个难题,特别是Android的手机种类太多,屏幕差异性很大。iOS在iPhone6之后也增加了很多种分辨率,也需要更多的考虑屏幕适配问题。不同的系统都提供了不少屏幕适配的机制和方法,但是需要很多繁琐细致的设计和实现,DeviceOne统一了屏幕适配的方式,开发者无需对这种细节了解。Deviceone提供3种级别的屏幕适配,绝大部分情况,开发者使用DeviceOne开发App完
- 屏幕适配的一些概念01
js_huh
设计尺寸规范-表格设计尺寸规范-图文设计尺寸规范-开发尺寸也可以看看屏幕适配的一些概念02手机适配浏览,所引发的一场“头脑风暴”iPone屏幕适配
- iOS Masonry 布局- UIScrollView/Masonry自动布局对UIScrollView的内容自适应
加菲猫的小窝
2020年10月13日13:26:37「复习」控制器中布局一般基础都是以UIscrollview为底部视图进行绘制的,方便我们进行屏幕适配。在使用masonry布局的时候如何让UIscrollview自动计算内容高度,实现contentsize自适应。第一步,添加UIscrollview到self.view上,并设置约束等于父视图,设置宽度。self.scrollView=[UIScrollVie
- H5直接唤起高德地图导航APP和唤起百度地图导航APP
wwf1225
javascript
1.百度地图官方文档:地图调起API|百度地图APISDK2.高德地图官方文档:路径规划-Android-开发指南-高德地图手机版|高德地图APIif(val.name=='高德'){//手机获取的是百度坐标,百度坐标转高德letlng=bd09togcj02(this.lng,this.lat)[0]letlat=bd09togcj02(this.lng,this.lat)[1]//工单返回的终
- Android开发-之屏幕适配
jack22001
android
Android开发-之屏幕适配前言Android系统能发展到今天,离不开其开源性,但是随着越来越多的设备接入Android系统,并对Android系统进行各种各样的定制,导致长期以来出现了各种碎片化严重的问题。例如,Android屏幕尺寸多种多样,如5寸、5.5寸、6寸、6.4寸等等,当然,屏幕分辨率也是多种多样,这很容易导致同一元素在不同手机上显示的效果不同的问题,因此,Android应用开发中
- Android-推荐一个自定义ImageView开源库(android-shape-imageview )
阿博聊编程
图片来源网络,入侵必删你有没有遇到自定义形状图片的需求呢?我发现一个了关于自定义图片形状的开源库。这篇博客来分享它,希望对你有所帮助。android-shape-imageview这个库主要提供自定义形状的Imageview,以及更多自定义框架。引入项目implementation'com.github.siyamed:android-shape-imageview:0.9.+@aar'截止我写博
- 第三方唤醒&登陆
ceremony08
#功能说明:第三方应用或web下载/唤醒/自动登录到学习通#负责人:iOS-肖泽强,android-殷雅乐#协议版本:v1.0协议详细操作过程1.第三方应用内上架学习通2.第三方应用后台服务配置3.第三方应用用户账号对接学习通泛雅后台4.第三方应用内打开学习通完成自动登录调用方式:step2配置参数说明:fid单位id超星固定分配如:2023fidType单位类型超星固定分配如:1token用户登
- 【RK3399 Android10 二合一 支持GM8775C mipi转lvds 10.1寸屏幕适配】
LJ-SEU
linuxandroid
【RK3399Android10二合一支持GM8775Cmipi转lvds10.1寸屏幕适配】文章目录【RK3399Android10二合一支持GM8775Cmipi转lvds10.1寸屏幕适配】原理图分析数据信号链路分析调试记录GM8775C后端链路测试输出前端mipi信号测试改板后调试成功后续问题修复舜宇的rk3399的Android10二合一新板卡,需求是使用mipi输出信号,通过GM877
- android-【DDMS->heap->MAT】工具-内存分析工具
lizhenmingdirk
android内存泄漏DDMS
转自:http://blog.csdn.net/jingwen3699/article/details/7977275http://blog.csdn.net/fulinwsuafcie/article/details/83632181.Windows->Preferences->Android->DDMScheckthe'ThreadUpdatesEnabled'checkthe'HeapUpd
- 【android】 android->profile 查看内存泄露
dualven_in_csdn
androidandroid
目录实例讲解各字段解释实例讲解各字段解释在AndroidStudio的Profile视图中,ArrangebyStack用于对内存分配和释放事件进行堆栈排列,以便更好地了解内存使用情况。以下是表上各列的一般含义:1.**CallChart(调用图)**:显示堆栈调用图。2.**Method(方法)**:显示发生内存分配或释放的方法名称。3.**Allocations(分配)**:显示在该方法中发生
- Android-对话框、通知
阿博聊编程
Toast类Android中的Toast是一种简易的消息提示框。Toast是一个包含用户点击消息。Toast类会帮助你创建和显示这些。当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽量不引起人的注意,同时还向用户提供信息,希望他们看见。而且Toast显示时间有限,Toast会根据用户设置的是
- Flutter开发(18)- 屏幕适配
5e4c664cb3ba
目前移动端的设备已经非常多,并且不同的设备手机屏幕也不相同。目前做移动端开发都要针对不同的设备进行一定的适配,无论是移动原生开发、小程序、H5页面。Flutter中如何针对不同的手机屏幕来进行适配呢?我们一起来聊聊这个话题。一.Flutter单位1.1.Flutter中的单位在进行Flutter开发时,我们通常不需要传入尺寸的单位,那么Flutter使用的是什么单位呢?Flutter使用的是类似于
- Android屏幕适配框架-(今日头条终极适配方案)
sweetying
前言在Android开发中,因为碎片化的问题,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈我们之前做屏幕适配一般都会用到一下两种方式:第一种就是宽高限定符适配,什么是宽高限定符适配呢├──src/main│├──res│├──├──values│├──├──values-800x480│├──├──values-860x540│├──├──value
- vue 根据缩放适配大屏
比奇堡hanfei派大星
vue.js前端javascript
这里写目录标题根据scale缩放适配大屏根据scale缩放超宽屏幕适配方案根据scale缩放适配大屏//这种适配只适合1920*1080和3840*2160的屏幕如果是超宽屏幕就往下看//不多逼逼直接上代码exportdefault{name:"Home",methods:{f(){varw=window.innerWidth;//获取窗口宽度varh=window.innerHeight;//获
- vue大数据大屏幕适配完美解决方案
探索未知zxx
vue大数据vue前端javascriptvue
首先创建一个a.js//屏幕适配mixin函数//*默认缩放值constscale={width:'1',height:'1',}//*设计稿尺寸(px)constbaseWidth=1920constbaseHeight=1080//*需保持的比例(默认1.77778)constbaseProportion=parseFloat((baseWidth/baseHeight).toFixed(5)
- Flutter 屏幕适配 -- 百分比
Android_开发工程师
本文是根据DanieleCambi的文章Flutter—EffectivelyscaleUIaccordingtodifferentscreensizes总结而来:文章地址:https://medium.com/flutter-community/flutter-effectively-scale-ui-according-to-different-screen-sizes-2cb7c115ea0
- 基本数据类型和引用类型的初始值
3213213333332132
java基础
package com.array;
/**
* @Description 测试初始值
* @author FuJianyong
* 2015-1-22上午10:31:53
*/
public class ArrayTest {
ArrayTest at;
String str;
byte bt;
short s;
int i;
long
- 摘抄笔记--《编写高质量代码:改善Java程序的151个建议》
白糖_
高质量代码
记得3年前刚到公司,同桌同事见我无事可做就借我看《编写高质量代码:改善Java程序的151个建议》这本书,当时看了几页没上心就没研究了。到上个月在公司偶然看到,于是乎又找来看看,我的天,真是非常多的干货,对于我这种静不下心的人真是帮助莫大呀。
看完整本书,也记了不少笔记
- 【备忘】Django 常用命令及最佳实践
dongwei_6688
django
注意:本文基于 Django 1.8.2 版本
生成数据库迁移脚本(python 脚本)
python manage.py makemigrations polls
说明:polls 是你的应用名字,运行该命令时需要根据你的应用名字进行调整
查看该次迁移需要执行的 SQL 语句(只查看语句,并不应用到数据库上):
python manage.p
- 阶乘算法之一N! 末尾有多少个零
周凡杨
java算法阶乘面试效率
&n
- spring注入servlet
g21121
Spring注入
传统的配置方法是无法将bean或属性直接注入到servlet中的,配置代理servlet亦比较麻烦,这里其实有比较简单的方法,其实就是在servlet的init()方法中加入要注入的内容:
ServletContext application = getServletContext();
WebApplicationContext wac = WebApplicationContextUtil
- Jenkins 命令行操作说明文档
510888780
centos
假设Jenkins的URL为http://22.11.140.38:9080/jenkins/
基本的格式为
java
基本的格式为
java -jar jenkins-cli.jar [-s JENKINS_URL] command [options][args]
下面具体介绍各个命令的作用及基本使用方法
1. &nb
- UnicodeBlock检测中文用法
布衣凌宇
UnicodeBlock
/** * 判断输入的是汉字 */ public static boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
- java下实现调用oracle的存储过程和函数
aijuans
javaorale
1.创建表:STOCK_PRICES
2.插入测试数据:
3.建立一个返回游标:
PKG_PUB_UTILS
4.创建和存储过程:P_GET_PRICE
5.创建函数:
6.JAVA调用存储过程返回结果集
JDBCoracle10G_INVO
- Velocity Toolbox
antlove
模板toolboxvelocity
velocity.VelocityUtil
package velocity;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.c
- JAVA正则表达式匹配基础
百合不是茶
java正则表达式的匹配
正则表达式;提高程序的性能,简化代码,提高代码的可读性,简化对字符串的操作
正则表达式的用途;
字符串的匹配
字符串的分割
字符串的查找
字符串的替换
正则表达式的验证语法
[a] //[]表示这个字符只出现一次 ,[a] 表示a只出现一
- 是否使用EL表达式的配置
bijian1013
jspweb.xmlELEasyTemplate
今天在开发过程中发现一个细节问题,由于前端采用EasyTemplate模板方法实现数据展示,但老是不能正常显示出来。后来发现竟是EL将我的EasyTemplate的${...}解释执行了,导致我的模板不能正常展示后台数据。
网
- 精通Oracle10编程SQL(1-3)PLSQL基础
bijian1013
oracle数据库plsql
--只包含执行部分的PL/SQL块
--set serveroutput off
begin
dbms_output.put_line('Hello,everyone!');
end;
select * from emp;
--包含定义部分和执行部分的PL/SQL块
declare
v_ename varchar2(5);
begin
select
- 【Nginx三】Nginx作为反向代理服务器
bit1129
nginx
Nginx一个常用的功能是作为代理服务器。代理服务器通常完成如下的功能:
接受客户端请求
将请求转发给被代理的服务器
从被代理的服务器获得响应结果
把响应结果返回给客户端
实例
本文把Nginx配置成一个简单的代理服务器
对于静态的html和图片,直接从Nginx获取
对于动态的页面,例如JSP或者Servlet,Nginx则将请求转发给Res
- Plugin execution not covered by lifecycle configuration: org.apache.maven.plugin
blackproof
maven报错
转:http://stackoverflow.com/questions/6352208/how-to-solve-plugin-execution-not-covered-by-lifecycle-configuration-for-sprin
maven报错:
Plugin execution not covered by lifecycle configuration:
- 发布docker程序到marathon
ronin47
docker 发布应用
1 发布docker程序到marathon 1.1 搭建私有docker registry 1.1.1 安装docker regisry
docker pull docker-registry
docker run -t -p 5000:5000 docker-registry
下载docker镜像并发布到私有registry
docker pull consol/tomcat-8.0
- java-57-用两个栈实现队列&&用两个队列实现一个栈
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/*
* Q 57 用两个栈实现队列
*/
public class QueueImplementByTwoStacks {
private Stack<Integer> stack1;
pr
- Nginx配置性能优化
cfyme
nginx
转载地址:http://blog.csdn.net/xifeijian/article/details/20956605
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了。而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了。然而,如果你真的想挤压出Nginx的性能,你必
- [JAVA图形图像]JAVA体系需要稳扎稳打,逐步推进图像图形处理技术
comsci
java
对图形图像进行精确处理,需要大量的数学工具,即使是从底层硬件模拟层开始设计,也离不开大量的数学工具包,因为我认为,JAVA语言体系在图形图像处理模块上面的研发工作,需要从开发一些基础的,类似实时数学函数构造器和解析器的软件包入手,而不是急于利用第三方代码工具来实现一个不严格的图形图像处理软件......
&nb
- MonkeyRunner的使用
dai_lm
androidMonkeyRunner
要使用MonkeyRunner,就要学习使用Python,哎
先抄一段官方doc里的代码
作用是启动一个程序(应该是启动程序默认的Activity),然后按MENU键,并截屏
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRun
- Hadoop-- 海量文件的分布式计算处理方案
datamachine
mapreducehadoop分布式计算
csdn的一个关于hadoop的分布式处理方案,存档。
原帖:http://blog.csdn.net/calvinxiu/article/details/1506112。
Hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同ja
- 以資料庫驗證登入
dcj3sjt126com
yii
以資料庫驗證登入
由於 Yii 內定的原始框架程式, 採用綁定在UserIdentity.php 的 demo 與 admin 帳號密碼: public function authenticate() { $users=array( &nbs
- github做webhooks:[2]php版本自动触发更新
dcj3sjt126com
githubgitwebhooks
上次已经说过了如何在github控制面板做查看url的返回信息了。这次就到了直接贴钩子代码的时候了。
工具/原料
git
github
方法/步骤
在github的setting里面的webhooks里把我们的url地址填进去。
钩子更新的代码如下: error_reportin
- Eos开发常用表达式
蕃薯耀
Eos开发Eos入门Eos开发常用表达式
Eos开发常用表达式
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2014年8月18日 15:03:35 星期一
&
- SpringSecurity3.X--SpEL 表达式
hanqunfeng
SpringSecurity
使用 Spring 表达式语言配置访问控制,要实现这一功能的直接方式是在<http>配置元素上添加 use-expressions 属性:
<http auto-config="true" use-expressions="true">
这样就会在投票器中自动增加一个投票器:org.springframework
- Redis vs Memcache
IXHONG
redis
1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份。
4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Red
- Python - 装饰器使用过程中的误区解读
kvhur
JavaScriptjqueryhtml5css
大家都知道装饰器是一个很著名的设计模式,经常被用于AOP(面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,Web权限校验, Cache等。
原文链接:http://www.gbtags.com/gb/share/5563.htm
Python语言本身提供了装饰器语法(@),典型的装饰器实现如下:
@function_wrapper
de
- 架构师之mybatis-----update 带case when 针对多种情况更新
nannan408
case when
1.前言.
如题.
2. 代码.
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="list" index=&
- Algorithm算法视频教程
栏目记者
Algorithm算法
课程:Algorithm算法视频教程
百度网盘下载地址: http://pan.baidu.com/s/1qWFjjQW 密码: 2mji
程序写的好不好,还得看算法屌不屌!Algorithm算法博大精深。
一、课程内容:
课时1、算法的基本概念 + Sequential search
课时2、Binary search
课时3、Hash table
课时4、Algor
- C语言算法之冒泡排序
qiufeihu
c算法
任意输入10个数字由小到大进行排序。
代码:
#include <stdio.h>
int main()
{
int i,j,t,a[11]; /*定义变量及数组为基本类型*/
for(i = 1;i < 11;i++){
scanf("%d",&a[i]); /*从键盘中输入10个数*/
}
for
- JSP异常处理
wyzuomumu
Webjsp
1.在可能发生异常的网页中通过指令将HTTP请求转发给另一个专门处理异常的网页中:
<%@ page errorPage="errors.jsp"%>
2.在处理异常的网页中做如下声明:
errors.jsp:
<%@ page isErrorPage="true"%>,这样设置完后就可以在网页中直接访问exc