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

当尝试使用WindowManager添加ListView时,它会显示“onCreate()之前的活动无法使用系统服务”异常

当尝试使用WindowManager添加ListView时,出现“onCreate()之前的活动无法使用系统服务”异常的原因是,WindowManager是一个系统级服务,它需要在Activity的生命周期方法onCreate()之后才能使用。因此,在Activity的onCreate()方法中添加ListView时会出现该异常。

解决这个问题的方法是将添加ListView的代码移动到onCreate()方法之后的生命周期方法中,例如onStart()或onResume()方法中。这样可以确保在系统服务可用之后再添加ListView。

另外,需要注意的是,使用WindowManager添加View时需要申请相应的权限。在AndroidManifest.xml文件中添加以下权限:

代码语言:xml
复制
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

接下来,可以使用以下代码在Activity的生命周期方法中添加ListView:

代码语言:java
复制
@Override
protected void onResume() {
    super.onResume();
    
    WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    
    ListView listView = new ListView(this);
    // 添加ListView的适配器和数据等操作
    
    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);
    
    windowManager.addView(listView, layoutParams);
}

在上述代码中,我们首先获取WindowManager的实例,然后创建一个ListView并进行相应的操作,最后创建WindowManager.LayoutParams来设置ListView的布局参数,并使用WindowManager的addView()方法将ListView添加到窗口中。

需要注意的是,WindowManager.LayoutParams的type参数使用了WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,这是Android 8.0及以上版本中的一种特殊类型,用于在应用程序之上显示悬浮窗口。如果需要在较低版本的Android上运行,可以根据实际需求选择其他合适的类型。

推荐的腾讯云相关产品:腾讯云移动推送服务(https://cloud.tencent.com/product/tpns)可以用于实现消息推送功能,适用于各类移动应用场景。

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

相关·内容

屏幕旋转时调用PopupWindow update方法更新位置失效问题及解决方案

-- 这个ListView显示隐藏直接影响到PopupWindow在屏幕旋转时候update方法是否生效 --> <ListView android:id="@+id/listview"...当然一开始肯定要不停尝试写法,看看是不是布局文件本身有什么问题。如果怎么尝试都解决不了时候,这个时候可能已经踩到系统坑了,可是怎么确定?去看看源码,然后调试一下看看。...我们之前发现现象是 update 方法失效,准确说是update前两个参数 x,y 坐标失效,高度和宽度是可以。那我们就看开 update 方法前面两个参数怎么使用。...并添加一个全局滚动监听事件。...所以个人推测这是一个普遍存在问题,只是这种使用场景比较少。

1.2K00

屏幕旋转时调用PopupWindow update方法更新位置失效问题及解决方案

-- 这个ListView显示隐藏直接影响到PopupWindow在屏幕旋转时候update方法是否生效 --> <ListView android:id="@+id/listview"...当然一开始肯定要不停尝试写法,看看是不是布局文件本身有什么问题。如果怎么尝试都解决不了时候,这个时候可能已经踩到系统坑了,可是怎么确定?去看看源码,然后调试一下看看。...我们之前发现现象是 update 方法失效,准确说是update前两个参数 x,y 坐标失效,高度和宽度是可以。那我们就看开 update 方法前面两个参数怎么使用。...并添加一个全局滚动监听事件。...所以个人推测这是一个普遍存在问题,只是这种使用场景比较少。

1.9K90
  • 深入理解Android中startActivity过程

    1.5 显示目标Activity 目标Activity实例化完成后,系统会将其添加到窗口管理器(WindowManager)中,使其可见。...在handleResumeActivity()方法中,会调用WindowManager.addView()方法,将目标Activity视图添加到窗口管理器中。...AMS需要创建、暂停、恢复或销毁一个Activity它会通过Binder IPC向应用程序进程发送相应请求。ApplicationThread会接收到这些请求,并调用相应方法来处理这些请求。...AMS需要与应用程序进程通信它会调用ApplicationThread接口方法,如scheduleLaunchActivity()、schedulePauseActivity()、scheduleResumeActivity...AMS需要创建、暂停、恢复或销毁一个Activity它会通过Binder IPC向应用程序进程发送相应请求。

    14210

    Fragment基本使用

    remove()、replace()方法将碎片从从活动中移除,但如果在事务提交之前调用addToBackStack()方法,这时碎片也会进入到停止状态。...销毁状态:活动被销毁,相关联碎片进入销毁状态。...方式添加,在由于内存紧张导致Fragment被系统杀掉并恢复(re-instantiate)能保留这些数据 可以在FragmentonAttach()中通过getArguments()获得传进来参数...onRestoreInstanceState()在onStart()之后,onResume()之前,因此避免出现该异常方案有: 不要把Fragment事务放在异步线程回调中 逼不得已使用commitAllowingStateLoss...Fragment和Activity完整生命周期如上图所示 Fragment在ActivityonCreate()中被添加 Activity super.onCreate执行完毕 Fragment

    1.9K30

    深入理解 Android Window系统

    ); setContentView(R.layout.activity_main); } WindowManager WindowManager是Android系统关键系统服务,它管理应用程序窗口显示...窗口类型和层级:通过使用窗口类型和层级,WindowManager控制窗口属性,例如指定窗口是应用程序窗口、系统窗口还是子窗口,并设置其显示层级。...(R.layout.my_window_layout, null); // 使用WindowManager将视图添加到窗口中 windowManager.addView(myWindowView, params...Activity创建,与之关联Window会被创建,而Activity销毁,其Window也会被销毁。让我们更详细地了解Window生命周期如何与Activity生命周期交互。...创建Window 您调用setContentView()或类似的方法来设置Activity内容视图系统会自动为该Activity创建一个Window。

    65120

    精选Android中高级高频面试题:四大组件及Fragment原理

    正在被启动,此时Activity可见但不在前台,还处于后台,无法与用户交互; onResume():表示Activity获得焦点,此时Activity可见且在前台并开始活动,这是与onStart区别所在...状态,此方法调用在onStop之前,与onPause没有既定时序关系; Activity被重建后,系统会调用onRestoreInstanceState,并且把onSave(简称)方法所保存Bundle...所以如果在fragment生命周期内获取获取数据,使用replace会重复获取; 添加相同fragment,replace不会有任何变化,add会报IllegalStateException异常;...bug,可以使用replace或使用add添加一个tag参数; 4、getFragmentManager、getSupportFragmentManager 、getChildFragmentManager...bindService():如果该服务之前还没创建,系统回调顺序为onCreate()→onBind()。

    1.9K00

    Android性能优化(一)

    在屏幕上执行View绘制过程.measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示背景窗口,将其替换为主活动。...系统出现异常、断电、用户主动重启等,我们可以通过比较应用开机运行时间是否比之前记录值更小 被系统杀死。...关于系统内存状态,可以直接读取文件 /proc/meminfo。系统可用内存很小(低于 MemTotal 10%),OOM、大量 GC、系统频繁自杀拉起等问题都非常容易出现。 应用使用内存。...并且Android系统在内存管理上有一个Generational Heap Memory模型,内存达到某一个阈值系统会根据不同规则自动释放可以释放内存。...唯一一个在java虚拟机中不会OOM区域 对象存活判断 引用计数法 给对象添加引用计数器,每当一个地方引用时,计数器加1,引用失效时计数器减1;引用计数器为0即为对象不可用 实现简单,效率高,但是无法解决相互引用问题

    2.6K20

    悬浮窗开发设计实践

    ,大概思路是判断手指抬起时候点是在屏幕左边还是右边4.2 请求悬浮窗权限关于悬浮窗权限API= 23,需要在AndroidManifest...中申请权限,为了防止用户手动在设置中取消权限,需要在每次使用时check一下是否有悬浮窗权限存在;Settings.canDrawOverlays(this)API > 25系统直接禁止用户使用TYPE_TOAST...而Android 8.0对系统和API行为做了修改,包括使用SYSTEM_ALERT_WINDOW权限应用无法使用一下窗口类型来在其他应用和窗口上方显示提醒窗口:如果需要实现在其他应用和窗口上方显示提醒窗口...尝试解决这个问题为了解决这个问题,最初实现方式是对所有经过activity进行记录,显示就加1,页面被挂起就减1,如果减到当前计数为0说明所有页面已经关闭了,就可以隐藏悬浮窗了。...该问题解决方案给通话界面设置taskAffinity,如果不设置的话,按下home键系统会清理最近不活动和application相同taskAffinity所有处于后台栈,taskAffinity

    2.4K40

    行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案

    正在被启动,此时Activity可见但不在前台,还处于后台,无法与用户交互; onResume():表示Activity获得焦点,此时Activity可见且在前台并开始活动,这是与onStart区别所在...参考解答:发生条件:异常情况下(系统配置发生改变导致Activity被杀死并重新创建、资源内存不足导致低优先级Activity被杀死) 系统会调用onSaveInstanceState来保存当前Activity...所以如果在fragment生命周期内获取获取数据,使用replace会重复获取; 添加相同fragment,replace不会有任何变化,add会报IllegalStateException异常;...bug,可以使用replace或使用add添加一个tag参数; ?...bindService():如果该服务之前还没创建,系统回调顺序为onCreate()→onBind()。

    80120

    Android程序员问答题

    onCreate(Bundle)是你初始化活动地方,而onPause()是你处理用户离开你活动地方。...3.Service服务 服务是一个应用程序组件,代表应用程序希望在不与用户交互情况下执行长时间运行操作,或者提供其他应用程序使用功能。 4.什么是服务服务不是一个单独过程。...singleTop是在启动活动如果发现返回栈栈顶已经是该活动,则认为可以直接使用它。 singleTask是如果每次启动系统首先会在返回栈中检查是否存在该活动实例。...内存泄漏原因: 数据库没有关闭游标cursor 构造Adapter,没有使用 convertView Bitmap对象不在使用时,调用recycle()释放内内存对象被生命周期长对象引用。...Android工程师异常吃香,有一年开发经验Android工程师月薪在8000元左右。

    65820

    Android面试大纲(集合)

    方法,远程攻击者可通过使用Java反射机制利用该漏洞执行任意Java对象方法 2、WebView销毁步骤 WebView在其他容器上(如:LinearLayout),销毁Activity,需要在...Not Responding,页面无响应对话框 2、发生ANR条件 应用程序响应性是由ActivityManager和WindowManager系统服务监视ANR发生条件满足,就会弹出ANR...(内存溢出),当前占用内存加上我们申请内存资源超过了Dalvik虚拟机最大内存限制就会抛出Out of memory异常 2、OOM相关概念 内存溢出:指程序在申请内存,没有足够空间供其使用 内存泄漏...:指程序分配出去内存不再使用无法进行回收 内存抖动:指程序短时间内大量创建对象,然后回收现象 3、解决OOM Bitmap相关 图片压缩 加载缩略图 在滚动不加载图片 回收Bitmap 使用inBitmap...属性 捕获异常 其他相关 listview重用convertView、使用lru 避免onDraw方法执行对象创建 谨慎使用多进程 15 Bitmap面试题 1、recycle 在安卓3.0以前Bitmap

    1.1K20

    ListView使用技巧-更新中

    活动显示 //listView.setScrollbarFadingEnabled(true); //false 不活动时候隐藏,活动时候也隐藏...true-不活动隐藏,活动显示 listView.setVerticalScrollBarEnabled(false); // 或者在...取消ListViewItem点击效果 点击ListView某一项Item系统默认会出现一个点击效果,在Android5.X上是一个波纹效果,而在5.X以下是一个改变背景颜色效果,但是我们可以通过修改...设置ListView需要显示在第几行 ListView以Item为单位进行显示,默认显示第一个Item,需要指定具体Item,可以通过如下代码来实现 ListView.setSelection(N...注意:在使用mAdapter.notifyDataSetChanged方法,必须保证传进Adapter数据List是同一个List而不能是其他对象,否则将无法实现改效果。

    94830

    Android 面试之必问Android基础

    启动电源以及系统启动:电源按下引导芯片从预定义地方(固化在ROM)开始执行,加载引导程序BootLoader到RAM,然后执行。...Linux内核启动:内核启动,设置缓存、被保护存储器、计划列表、加载驱动。其完成系统设置,会先在系统文件中寻找init.rc文件,并启动init进程。...使用bindService启动onCreate()与onBind()都只会调用一次。...使用startService启动是单独开一个服务,与Activity没有任何关系,而bindService方式启动,Service会和Activity进行绑定,对应activity销毁,对应...Android会尽量保留一个正在运行进程,只在内存资源出现不足,Android会尝试停止一些进程从而释放足够资源给其他新进程使用, 也能保证用户正在访问的当前进程有足够资源去及时地响应用户事件

    72621

    Android知识点

    开发tip 用getApplication()来取Context参数 对于需要使用Context对象作为参数函数,要使用getApplication()获取Context对象参数,而不要使用this...一些华为机器log和Toast打印一直异常,不要在这上面耽误时间 代码至少每天备份一次,或者是完善一个功能就备份一次,不要堆积之后一次性备份,因为在你代码出问题需要回溯代码你需要从服务器上重新取代码...例如在activityonCreate方法里面调用popupwindowshow方法,有可能由于activity没有完全初始化导致程序异常(android.view.WindowManager$BadTokenException...切勿使用notifyDataSetChanged()方法,这里要用两个参数notifyItemChanged(1,"gfg")方法。 无法通过搜索解决问题时候,读源码是最快解决思路。...由于listview复用机制,给一个控制设置状态时候,相应要给其他控件也设置状态(else),否则就会复用 ?

    66910

    Android智能平板应用,界面适配另一种轻量级方法

    最流行就是头条方案了,使用也超级简单。然而,如果不想引入,还可以简单一个工具类实现,原理类似于头条方案。 这里简单介绍下,使用起来也很简单。 原理就是转换设备显示像素密度Density。...* * 计算出来后,我们需要在绘制view之前先设置好 * * 在onCreatesetContentView之前添加 * ———————————————...计算出来后,我们需要在绘制view之前先设置好。 使用方法 在BaseActivityonCreate中调用一下就可以了。...view编写布局文件预览xml会有问题!...,但据我观察,像微信qq这些app字体是不随系统显示字体大小变化. ### 本库是按照设计图宽度和对应标准dpi来适配(宽度增加或减少,高度同比例增加或减少),在不同分辨率,不同ppi(手机屏幕密度

    83320

    Activity 不只有跳转。功能篇(一)

    SingleTop:在每次启动活动时候如果发现栈栈顶已经有该活动了,那么就直接使用它,不会再创建新活动实例。...2、每次用户旋转屏幕,您Activity将被破坏并重新创建。屏幕改变方向系统会破坏并重新创建前台Activity,因为屏幕配置已更改,您Activity可能需要加载替代资源(例如布局)。...在stop()之前系统会调用onSaveInstanceState()方法,以便您Activity可以使用一组键值对来保存状态信息。...,这样系统能保存视图层次结构状态 super.onSaveInstanceState(savedInstanceState); } 恢复您Activity状态   Activity在之前被破坏后重新创建...因为onCreate()调用该方法是系统正在创建一个新Activity实例或重新创建一个以前实例,所以您必须Bundle在尝试读取之前检查该状态是否为空。

    1.1K20

    Android实现后台服务拍照功能

    可能许多人遇到问题就是卡在没有预览界面该如何拍照这里,希望这样一种取巧方式可以帮助大家在以后项目中遇到无法直接解决问题,可以考虑从另外角度切入去解决问题。...3.在不使用Camera资源或者发生任何异常,请记得释放Camera资源,否则为导致相机被一直持有,别的应用包括系统相机也用不了,只能重启手机解决。...4.关于代码中WakeLocaManager类,是我自己封装唤醒锁管理类,这也是大家在处理后台关键业务需要特别关注一点,保证业务逻辑在处理系统不会进入休眠。...相机操作需要谨慎,获取时候需要捕获异常(native异常,连接相机错误,相信大家也遇到过),不使用异常及时释放(可以把相机对象写成static,然后在全局异常捕获中对相机做释放,防止在持有相机这段时间内应用异常导致相机被异常持有...代码大家稍作修改就可以使用,记得添加相关权限。以下是系统窗口、唤醒锁、相机权限。如果用到自动对焦再拍照,记得声明以下uses-feature标签。其它常用权限这里就不赘述。

    2.8K30

    Android 开发艺术探索笔记二

    管理核心成员有:DisplayContent、WindowToken与WindowState 窗口动画 窗口间进行切换使用动画更加炫酷些,是由WMS动画子系统负责,管理者为WindowAnimator...** 使用场景Intentservice,不需要使用handlerThread使用quit,quitsafely终止执行。 IntentService执行后台耗时任务,任务执行后它会停止。...onHandlerThread方法执行结束后,IntentService采用stopSelf(int startId)来尝试停止服务,而使用stopSelf()方法则会立刻停止所有服务,而stopSelf...(int startId)等待所有消息都处理完毕后才会终止,尝试停止服务之前判断最近启动服务次数是否与startId相等,相等则停止。...:饱和策略,这是任务队列与线程池都满情况下,所采取应对策略,默认是AbordPolicy,表示无法处理新任务,抛出RejectedExecutionExecption异常,还有三种策略: CallerRunsPolicy

    1.8K10

    备战金九银十:BAT大厂最爱问Android核心面试百题详细解析!

    手动调用stopService()关闭服务,自动调用内部方法:onDestory(),如果一个Service被启动且被绑定,如果在没有解绑前提下使用stopService()关闭服务无法停止服务。...尝试开启硬件加速来使ListView滑动更加流畅。 7. 使用 RecycleView 代替。...内存不足,onPause,onStop之后activity可能会被系统摧毁。 通过返回退出activity,activity状态并不会保存。...Activity被销毁后,重新启动,在onCreate方法中,接受保存bundle参数,并将之前数据取出。...在 ScrollView 添加一个 ListView会导致listview 控件显示不全,通常只会显示一条,这是因为两个控件滚动事件冲突导致。

    1.2K31

    笔记53 | 管理系统UI(一)

    设置主题优势是: 易于维护,且不像动态设置标签那样容易出错 有更流畅UI转换,因为在初始化你Activity之前系统已经得到了需要渲染UI信息 另一方面我们可以选择使用...setSystemUiVisibility()仅仅在被调用View显示时候才会生效。 从View导航到别的地方,用setSystemUiVisibility()设置标签会被清除。...使用这种方法时候,你就需要来确保应用中特定区域不会被系统栏掩盖(比如地图应用中一些自带操作区域)。如果被覆盖了,应用可能就会无法使用。...当你需要隐藏系统UI使用 SYSTEM_UI_FLAG_FULLSCREEN。...如果你在ActivityonCreate()方法中隐藏系统栏,当用户按下home键系统栏就会重新显示。当用户再重新打开activity时候,onCreate()不会被调用,所以系统栏还会保持可见。

    1.4K40
    领券