郑州网站做网站郑州网站推广策划

张小明 2026/1/9 14:37:49
郑州网站做网站,郑州网站推广策划,效果图制作软件免费,如何建立网页1.前言 在进行14.0的系统定制开发中#xff0c;在某些app的定制过程中#xff0c;需要知道某个app的启动时候然后获取 应用使用时长的功能#xff0c;所以就需要监听某个app的启动后就获取使用时长#xff0c;需要在Activity的生命周期中来实现监听功能 2.frameworks监听…1.前言在进行14.0的系统定制开发中在某些app的定制过程中需要知道某个app的启动时候然后获取 应用使用时长的功能所以就需要监听某个app的启动后就获取使用时长需要在Activity的生命周期中来实现监听功能2.frameworks监听某个app启动获取应用使用时长功能实现的核心类frameworks\base\core\java\android\app\Activity.java3.frameworks监听某个app启动获取应用使用时长功能实现的核心功能分析和实现Android Activity生命周期是Android开发中非常重要的概念它描述了一个Activity从创建到销毁的整个过程。Activity生命周期由一系列回调方法组成开发者可以在这些方法中执行相应的操作。1. Activity生命周期的状态Activity在其生命周期中会经历以下几种状态运行RunningActivity位于屏幕前台用户可以与它交互。暂停PausedActivity部分被遮挡不再处于前台但仍然可见例如有一个透明或非全屏的Activity覆盖在上面。此时Activity不再接收用户输入。停止StoppedActivity完全被遮挡不可见。它仍然保留所有状态和成员信息但可能被系统销毁。销毁DestroyedActivity被系统销毁或从内存中移除。2. 生命周期回调方法Activity类提供了以下核心生命周期方法onCreate()调用时机Activity首次创建时调用。作用进行一次性初始化如加载布局、绑定数据等。后续状态onStart()onStart()调用时机Activity即将变为可见时调用进入前台。作用准备Activity进入前台但尚未与用户交互。后续状态onResume()如果Activity进入前台或onStop()如果Activity被隐藏onResume()调用时机Activity开始与用户交互之前调用。此时Activity位于Activity栈的顶部。作用启动动画、初始化相机等需要与用户交互的组件。后续状态onPause()onPause()调用时机当Activity即将进入暂停状态时调用例如有另一个非全屏Activity覆盖。作用提交未保存的更改、释放系统资源、停止动画等。注意此方法应快速执行否则会影响新Activity的显示。后续状态onResume()如果Activity重新回到前台或onStop()如果Activity完全不可见onStop()调用时机Activity完全不可见时调用。作用释放不再需要的资源保存数据。后续状态onRestart()如果Activity重新显示或onDestroy()如果Activity被销毁onRestart()调用时机Activity从停止状态重新显示时调用在onStart()之前。作用重新初始化在onStop()中释放的资源。后续状态onStart()onDestroy()调用时机Activity被销毁之前调用。这可能是因为Activity结束调用finish()或系统为节省空间而临时销毁该Activity。作用释放所有资源包括线程、数据库连接等。3. 生命周期图示为了更好地理解以下是一个经典的生命周期图示描述性启动ActivityonCreate() - onStart() - onResume()另一个Activity覆盖当前Activity非全屏onPause() - 如果完全覆盖onStop()返回原ActivityonRestart() - onStart() - onResume()回退或结束当前ActivityonPause() - onStop() - onDestroy()注意当系统资源不足时可能会杀死后台的Activity。此时当用户返回时Activity会重新创建。4. 保存和恢复状态由于Activity可能被系统销毁因此需要保存状态以便恢复。onSaveInstanceState()在Activity可能被销毁之前调用例如屏幕旋转、系统资源回收。可以将临时数据保存到Bundle中。onRestoreInstanceState()在onStart()之后、onResume()之前调用用于恢复保存的状态。也可以选择在onCreate()中恢复。5. 实际开发中的注意事项避免在onPause()和onStop()中执行耗时操作否则会影响新Activity的响应。在onResume()中重新获取资源如相机在onPause()中释放。使用onSaveInstanceState()保存临时UI状态使用onCreate()或onRestoreInstanceState()恢复。了解配置变更如屏幕旋转会销毁并重建Activity因此需要妥善处理状态保存。3.1 Activity.java中相关源码分析 ‌Activity在‌Android应用程序中扮演着核心角色主要负责展示用户界面、处理用户输入、管理生命周期以及与其他组件进行交互。 展示用户界面 Activity是用户可以看到的一个屏幕它负责显示应用程序的用户界面包括布局、按钮、文本框等元素。 用户可以通过与这些界面的交互来完成各种操作。MainThread CallSuper protected void onCreate(Nullable Bundle savedInstanceState) { if (DEBUG_LIFECYCLE) Slog.v(TAG, onCreate this : savedInstanceState); if (mLastNonConfigurationInstances ! null) { mFragments.restoreLoaderNonConfig(mLastNonConfigurationInstances.loaders); } if (mActivityInfo.parentActivityName ! null) { if (mActionBar null) { mEnableDefaultActionBarUp true; } else { mActionBar.setDefaultDisplayHomeAsUpEnabled(true); } } .... mRestoredFromBundle savedInstanceState ! null; mCalled true; } public void onCreate(Nullable Bundle savedInstanceState, Nullable PersistableBundle persistentState) { onCreate(savedInstanceState); } CallSuper protected void onResume() { if (DEBUG_LIFECYCLE) Slog.v(TAG, onResume this); dispatchActivityResumed(); mActivityTransitionState.onResume(this); enableAutofillCompatibilityIfNeeded(); if (mAutoFillResetNeeded) { if (!mAutoFillIgnoreFirstResumePause) { View focus getCurrentFocus(); if (focus ! null focus.canNotifyAutofillEnterExitEvent()) { // TODO(b/148815880): Bring up keyboard if resumed from inline authentication. // TODO: in Activity killed/recreated case, i.e. SessionLifecycleTest# // testDatasetVisibleWhileAutofilledAppIsLifecycled: the Views initial // window visibility after recreation is INVISIBLE in onResume() and next frame // ViewRootImpl.performTraversals() changes window visibility to VISIBLE. // So we cannot call View.notifyEnterOrExited() which will do nothing // when View.isVisibleToUser() is false. getAutofillManager().notifyViewEntered(focus); } } } notifyContentCaptureManagerIfNeeded(CONTENT_CAPTURE_RESUME); mCalled true; } //add core start public boolean isAppRunningState(Nullable String appPackageName){ ActivityManager activities (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); ListActivityManager.RunningAppProcessInfo appProcesses activities.getRunningAppProcesses(); if (appProcesses null) { return false; } for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { Log.e(Activity_Main,appProcess.processName appProcess.processName); if (appProcess.processName.equals(appPackageName)) { return true; } } return false; } private String getappusedtimes(Nullable String appPackageName){ String usedtimes ; UsageStatsManager usageStatsManager (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE); try { Calendar calendar Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); ListUsageStats stats usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, calendar.getTimeInMillis(), System.currentTimeMillis()); for(int i0;istats.size();i){ final android.app.usage.UsageStats pkgStats stats.get(i); String package_namepkgStats.getPackageName(); long time_begin pkgStats.getFirstTimeStamp(); long time_endpkgStats.getLastTimeStamp(); long time_usedpkgStats.getLastTimeUsed(); long time_totalspkgStats.getTotalTimeInForeground(); if(time_total0package_name.equals(appPackageName)) { Log.e(AppInfoDashboardFragment,package_name:package_name--time_begin:time_begin--time_used:time_used--time_total:time_total); return time_totals/1000s; } } } catch (Exception e) { e.printStackTrace(); } return usedtimes; } //add core end CallSuper protected void onPostResume() { //add core start boolean isRunning isAppRunningState(com.tel.troops); android.util.Log.e(Activity_Main,com.tel.troops is runisRunning); if(isRunning){ String run_time getappusedtimes(com.tel.troops); android.util.Log.e(Activity_Main,com.tel.troops is run_time run_time); } //add core end final Window win getWindow(); if (win ! null) win.makeActive(); if (mActionBar ! null) mActionBar.setShowHideAnimationEnabled(true); mCalled true; }在上述的Activity.java的相关源码中在onCreate(Nullable Bundle savedInstanceState) 中 的相关源码中主要是初始化布局等功能而在onPostResume()表示页面已经加载完毕后 调用的相关方法所以就可以在onPostResume()中来调用 isAppRunningState(com.tel.troops) 来利用ActivityManager.RunningAppProcessInfo当前置顶运行的进行是否是需要监听的app包名 如果返回true就可以监听到app已经启动了,这时候就可以调用getappusedtimes(com.tel.troops); 来获取需要监听app的运行时间了这样就可以监听app启动的时候来获取这个app的运行时间了 从而来实现了相关的功能
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设项目前分析线上营销渠道主要有哪些

Wan2.2-T2V-A14B 支持复杂场景描述的视频生成能力分析 在影视预演、广告创意和教育动画等专业内容创作领域,一个长期存在的痛点是:从文字脚本到视觉呈现的转化过程既耗时又昂贵。传统流程依赖导演、美术师与动画团队反复沟通打磨,周期动辄数天…

张小明 2026/1/6 22:40:41 网站建设

网站建设归哪个部门三个字吉利好听的公司名称

文章指出AI产品经理是高薪热门职业,非计算机背景者也能入局。核心能力包括:将模糊需求转化为可落地任务的能力;识别适合AI应用场景的商业嗅觉;通过数据测试、反馈和优化驱动AI产品迭代。建议新手通过系统学习、实践项目积累经验&a…

张小明 2026/1/8 13:37:57 网站建设

做网站版权所有怎么写价格低怎么说

1. 宏观架构:从流水线专家到吞吐量怪兽要理解 GPU 硬件,首先要对比它与 CPU 在晶体管分配上的本质区别。CPU:延迟导向型(Latency-Oriented)CPU 的核心目标是“尽快完成每一个任务”。为了实现这一点,它消耗…

张小明 2025/12/31 20:22:50 网站建设

网站编辑软件有哪些宣传产品的方式

第一章:Open-AutoGLM核心技术揭秘架构设计理念 Open-AutoGLM 采用模块化解耦设计,将自然语言理解、任务规划、代码生成与执行反馈四大核心能力分离,通过统一的中间表示层(Intermediate Representation, IR)进行通信。该…

张小明 2025/12/31 16:06:31 网站建设

哪个网站可以做字体大小wordpress添加动漫人物

Linux 系统安全防护全攻略 1. 解密对称加密文件 在 Linux 系统中,若要解密使用对称密钥加密的文件,可使用 gpg 命令。具体操作如下: gpg -o myfile --decrypt secret.gpg执行该命令后,GPG 会提示你输入密码短语。若输入的密码短语正确,GPG 会对文件进行解密,并将输…

张小明 2025/12/31 22:26:47 网站建设

房天下网站建设免费学习做网站

开源网球智能分析系统:革命性的比赛视觉追踪技术 【免费下载链接】tennis-tracking Open-source Monocular Python HawkEye for Tennis 项目地址: https://gitcode.com/gh_mirrors/te/tennis-tracking 在当今数字化体育时代,网球比赛分析正迎来一…

张小明 2025/12/31 4:12:48 网站建设