- 浏览: 24158 次
- 性别:
- 来自: 北京
-
最新评论
page4
在这里我们分析一下ContextImpl的init函数的具体实现:
final void init(LoadedApk packageInfo, IBinder activityToken, ActivityThread mainThread) {
init(packageInfo, activityToken, mainThread, null, null, Process.myUserHandle());
}
1 final void init(LoadedApk packageInfo, IBinder activityToken, ActivityThread mainThread,
2 Resources container, String basePackageName, UserHandle user) {
3 mPackageInfo = packageInfo;
4 mBasePackageName = basePackageName != null ? basePackageName : packageInfo.mPackageName;
5 mResources = mPackageInfo.getResources(mainThread);
6
7 if (mResources != null && container != null
8 && container.getCompatibilityInfo().applicationScale !=
9 mResources.getCompatibilityInfo().applicationScale) {
10 if (DEBUG) {
11 Log.d(TAG, "loaded context has different scaling. Using container's" +
12 " compatiblity info:" + container.getDisplayMetrics());
13 }
14 mResources = mainThread.getTopLevelResources(
15 mPackageInfo.getResDir(), Display.DEFAULT_DISPLAY,
16 null, container.getCompatibilityInfo());
17 }
18 mMainThread = mainThread;
19 mActivityToken = activityToken;
20 mContentResolver = new ApplicationContentResolver(this, mainThread, user);
21 mUser = user;
22 }
init函数的主要逻辑就是初始化主要的成员变量
page5
activity的attach函数的定义如下, 注意下面是两个函数:
1 final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token,
2 Application application, Intent intent, ActivityInfo info, CharSequence title,
3 Activity parent, String id, NonConfigurationInstances lastNonConfigurationInstances,
4 Configuration config) {
5 attach(context, aThread, instr, token, 0, application, intent, info, title, parent, id,
6 lastNonConfigurationInstances, config);
7 }
8
9 final void attach(Context context, ActivityThread aThread,
10 Instrumentation instr, IBinder token, int ident,
11 Application application, Intent intent, ActivityInfo info,
12 CharSequence title, Activity parent, String id,
13 NonConfigurationInstances lastNonConfigurationInstances,
14 Configuration config) {
15 attachBaseContext(context);
16
17 mFragments.attachActivity(this, mContainer, null);
18
19 mWindow = PolicyManager.makeNewWindow(this);
20 mWindow.setCallback(this);
21 mWindow.getLayoutInflater().setPrivateFactory(this);
22 if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) {
23 mWindow.setSoftInputMode(info.softInputMode);
24 }
25 if (info.uiOptions != 0) {
26 mWindow.setUiOptions(info.uiOptions);
27 }
28 mUiThread = Thread.currentThread();
29
30 mMainThread = aThread;
31 mInstrumentation = instr;
32 mToken = token;
33 mIdent = ident;
34 mApplication = application;
35 mIntent = intent;
36 mComponent = intent.getComponent();
37 mActivityInfo = info;
38 mTitle = title;
39 mParent = parent;
40 mEmbeddedID = id;
41 mLastNonConfigurationInstances = lastNonConfigurationInstances;
42
43 mWindow.setWindowManager(
44 (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
45 mToken, mComponent.flattenToString(),
46 (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
47 if (mParent != null) {
48 mWindow.setContainer(mParent.getWindow());
49 }
50 mWindowManager = mWindow.getWindowManager();
51 mCurrentConfig = config;
52 }
第15行(Activity->attach)调用attachBaseContext函数, 关于attachBaseContext函数的详细分析可以参考page6文件.
调用完attachBaseContext函数我们明白了, Activity拿着ContextImpl, 而ContextImpl也拿着这个Activity
page6
在这篇文章里, 我们分析一下Activity的attachBaseContext函数的具体逻辑, 其实attachBaseContext函数是从Activity的父类ContextThemeWrapper继承而来的,
我们先来看一下ContextThemeWrapper类的继承体系,
public class ContextThemeWrapper extends ContextWrapper
public class ContextWrapper extends Context
那么ContextThemeWrapper的attachBaseContext函数的具体实现如下:
1 @Override protected void attachBaseContext(Context newBase) {
2 super.attachBaseContext(newBase);
3 mBase = newBase;
4 }
第2行(ContextThemeWrapper->attachBaseContext)调用父类ContextWrapper的attachBaseContext函数:
1 protected void attachBaseContext(Context base) {
2 if (mBase != null) {
3 throw new IllegalStateException("Base context already set");
4 }
5 mBase = base;
6 }
ContextWrapper的attachBaseContext函数会设置成员变量mBase, 使之指向一个Context对象, 也就是ContextImpl了.
ContextWrapper的成员变量mBase的定义如下:
Context mBase;
第3行(ContextThemeWrapper->attachBaseContext)又会初始化成员变量mBase, 我靠!咋又有一个!
ContextThemeWrapper的mBase的定义如下:
private Context mBase;
在这里我们分析一下ContextImpl的init函数的具体实现:
final void init(LoadedApk packageInfo, IBinder activityToken, ActivityThread mainThread) {
init(packageInfo, activityToken, mainThread, null, null, Process.myUserHandle());
}
1 final void init(LoadedApk packageInfo, IBinder activityToken, ActivityThread mainThread,
2 Resources container, String basePackageName, UserHandle user) {
3 mPackageInfo = packageInfo;
4 mBasePackageName = basePackageName != null ? basePackageName : packageInfo.mPackageName;
5 mResources = mPackageInfo.getResources(mainThread);
6
7 if (mResources != null && container != null
8 && container.getCompatibilityInfo().applicationScale !=
9 mResources.getCompatibilityInfo().applicationScale) {
10 if (DEBUG) {
11 Log.d(TAG, "loaded context has different scaling. Using container's" +
12 " compatiblity info:" + container.getDisplayMetrics());
13 }
14 mResources = mainThread.getTopLevelResources(
15 mPackageInfo.getResDir(), Display.DEFAULT_DISPLAY,
16 null, container.getCompatibilityInfo());
17 }
18 mMainThread = mainThread;
19 mActivityToken = activityToken;
20 mContentResolver = new ApplicationContentResolver(this, mainThread, user);
21 mUser = user;
22 }
init函数的主要逻辑就是初始化主要的成员变量
page5
activity的attach函数的定义如下, 注意下面是两个函数:
1 final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token,
2 Application application, Intent intent, ActivityInfo info, CharSequence title,
3 Activity parent, String id, NonConfigurationInstances lastNonConfigurationInstances,
4 Configuration config) {
5 attach(context, aThread, instr, token, 0, application, intent, info, title, parent, id,
6 lastNonConfigurationInstances, config);
7 }
8
9 final void attach(Context context, ActivityThread aThread,
10 Instrumentation instr, IBinder token, int ident,
11 Application application, Intent intent, ActivityInfo info,
12 CharSequence title, Activity parent, String id,
13 NonConfigurationInstances lastNonConfigurationInstances,
14 Configuration config) {
15 attachBaseContext(context);
16
17 mFragments.attachActivity(this, mContainer, null);
18
19 mWindow = PolicyManager.makeNewWindow(this);
20 mWindow.setCallback(this);
21 mWindow.getLayoutInflater().setPrivateFactory(this);
22 if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) {
23 mWindow.setSoftInputMode(info.softInputMode);
24 }
25 if (info.uiOptions != 0) {
26 mWindow.setUiOptions(info.uiOptions);
27 }
28 mUiThread = Thread.currentThread();
29
30 mMainThread = aThread;
31 mInstrumentation = instr;
32 mToken = token;
33 mIdent = ident;
34 mApplication = application;
35 mIntent = intent;
36 mComponent = intent.getComponent();
37 mActivityInfo = info;
38 mTitle = title;
39 mParent = parent;
40 mEmbeddedID = id;
41 mLastNonConfigurationInstances = lastNonConfigurationInstances;
42
43 mWindow.setWindowManager(
44 (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
45 mToken, mComponent.flattenToString(),
46 (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
47 if (mParent != null) {
48 mWindow.setContainer(mParent.getWindow());
49 }
50 mWindowManager = mWindow.getWindowManager();
51 mCurrentConfig = config;
52 }
第15行(Activity->attach)调用attachBaseContext函数, 关于attachBaseContext函数的详细分析可以参考page6文件.
调用完attachBaseContext函数我们明白了, Activity拿着ContextImpl, 而ContextImpl也拿着这个Activity
page6
在这篇文章里, 我们分析一下Activity的attachBaseContext函数的具体逻辑, 其实attachBaseContext函数是从Activity的父类ContextThemeWrapper继承而来的,
我们先来看一下ContextThemeWrapper类的继承体系,
public class ContextThemeWrapper extends ContextWrapper
public class ContextWrapper extends Context
那么ContextThemeWrapper的attachBaseContext函数的具体实现如下:
1 @Override protected void attachBaseContext(Context newBase) {
2 super.attachBaseContext(newBase);
3 mBase = newBase;
4 }
第2行(ContextThemeWrapper->attachBaseContext)调用父类ContextWrapper的attachBaseContext函数:
1 protected void attachBaseContext(Context base) {
2 if (mBase != null) {
3 throw new IllegalStateException("Base context already set");
4 }
5 mBase = base;
6 }
ContextWrapper的attachBaseContext函数会设置成员变量mBase, 使之指向一个Context对象, 也就是ContextImpl了.
ContextWrapper的成员变量mBase的定义如下:
Context mBase;
第3行(ContextThemeWrapper->attachBaseContext)又会初始化成员变量mBase, 我靠!咋又有一个!
ContextThemeWrapper的mBase的定义如下:
private Context mBase;
发表评论
-
Activity与WindowManagerService连接的过程(三)
2018-04-16 16:27 625page11 WindowManagerService ... -
Activity与WindowManagerService连接的过程(二)
2018-04-16 16:36 778page6 WindowManagerGlobal的getW ... -
Activity与WindowManagerService连接的过程(一)
2018-04-16 16:21 996page1 Activity组件在 ... -
Activity的ViewRoot的创建过程(三)
2017-11-06 14:25 751page7 在这篇文章里, 我们分析一下W类的构造过程. W ... -
Activity的ViewRoot的创建过程(二)
2017-11-06 14:29 986page4 我们看一下ViewRootImpl对象的创 ... -
Activity的ViewRoot的创建过程(一)
2017-11-06 14:27 1089page1 当一个Activity第一次激活的时候会为该Ac ... -
Activity的Window和WindowManager的创建过程(三)
2017-07-05 11:49 1340page9 在这里我们分析一下DisplayManager的 ... -
Activity的Window和WindowManager的创建过程(二)
2017-07-05 11:31 561page5 在这篇文章中, 我们分析一下ContextImp ... -
Activity的Window和WindowManager的创建过程(一)
2017-07-05 11:27 617page1 我们开始分析一下Activity的Window和 ... -
Acitivy创建Context的过程(一)
2017-06-21 14:15 643page1 从本篇文章开始,我们分析一下Activity创建 ... -
应用程序进程与SurfaceFlinger的连接过程
2017-06-21 11:49 1069我们从SurfaceComposerClient对象的创建开始 ... -
Android源码之SurfaceFlinger的启动(三)
2017-04-20 11:09 1052page11 我们来看一下SurfaceFlinger ... -
Android源码之SurfaceFlinger的启动(二)
2017-04-18 15:15 898page6 我们看一下Thread的run函数的实现: ... -
Android源码之SurfaceFlinger的启动(一)
2017-04-17 10:07 1010page1 在Android系统中, 显示系统在底层是通过S ... -
Android源码之Zygote
2015-12-15 11:45 525当ActivityManagerService启动一个应用程序 ... -
Android源码之Binder(五)
2015-12-04 09:19 1535Service组件在启动时,需要将自己注册到Service M ... -
Android源码之Binder(四)
2015-12-04 09:18 1983case BINDER_SET_MAX_THREADS: ... -
Android源码之Binder(三)
2015-12-04 09:17 913{ int ret; struct binder_pr ... -
Android源码之Binder(二)
2015-12-04 09:15 560分析完Binder驱动程序的打开和内存分配的过程之后,我们看一 ... -
Android源码之Binder(一)
2015-12-04 09:12 1005在Android系统中,进程间通信使用的是Binder机制。B ...
相关推荐
首先系统的服务会先检查startActivity中的intent的信息,然后在去创建进程,最后才是执行启动Acitivy的操作。而我们上面提到的显示白黑屏的问题,就是在这段时间内产生的。 系统在绘制页面加载布局之前,首先会初始...
在做Service简单练习时,在Service中的OnCreate、OnStart、OnDestroy三个方法中都像在Activity中同样的方法调用了Toast.makeText,并在Acitivy中通过两个按钮来调用该服务的onStart和onDestroy方法: DemoService...
基于SSM框架的婚庆公司平台项目,分为门户模块和后台管理模块两个部分,主要涉及到权限管理和RBAC数据库设计。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
基于单片机protues仿真的智能电饭锅(仿真图、源代码) 该设计为基于单片机protues仿真的智能电饭锅,实现电饭锅功能; 1、系统使用51单片机为核心设计; 2、数码管显示温度、时间等; 3、市电供电,通过继电器切换和电热丝模拟; 4、按键设置和切换;
基于MATLAB的永磁同步电机(PMSM)磁场定向控制仿真模型研究:非线性系统分析与参考文献分享,基于MATLAB的永磁同步电机(PMSM)磁场定向控制仿真模型研究:非线性系统分析与参考文献分享,基于matlab的永磁同步电机(PMSM),磁场定向控制仿真模型。 永磁同步电机(PMSM)是一个非线性系统,具有多变量、强耦合的特点。 可提供参考文献 ,基于Matlab的PMSM; 磁场定向控制仿真模型; 非线性系统; 多变量系统; 强耦合。,基于MATLAB的PMSM磁场定向控制仿真模型研究
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
商品管理系统,使用ssm框架开发,包括用户注册及校验、邮箱激活、对商品信息的增删改查等,并实现了高德地图接口进行定位和支付宝接口(通过沙箱测试)。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
内容概要:本文档主要介绍了企业在进行大数据治理过程中构建统一指标库的方法、背景及其实现路径。文档首先阐述了数据治理的必要性和现状中存在的挑战,然后具体讲述了统一指标库的概念、建设目标和背景、以及具体实现的功能和技术路线。接着展示了统一指标库的核心功能包括需求管理、数据全生命周期管理、血缘关系管理、指标数据的高效利用及可视化等。此外还涉及如何在多个层面实现数据的集成和分析,确保数据质量和口径的一致性,最终提升企业的决策能力和管理水平。 适用人群:本文档适用于负责企业信息化建设、数据分析与治理的高级管理人员及技术人员。 使用场景及目标:主要应用于需要规范和完善数据治理体系的企业机构中,目的是帮助解决当前普遍存在的数据孤岛现象,以及由此引发的各种管理难题。同时,也适用于希望通过引入先进的技术和管理方法,增强自身的竞争力和服务水平的相关单位。 其他说明:通过统一的指标管理系统实现了不同业务部门间数据共享的目标,提高了工作效率,减少了冗余劳动。另外,通过案例研究表明,在实际应用中有显著成效,能够为企业节约大量时间和成本。
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
内容概要:本文详细介绍了关于MySQL的各种优化措施和技术手段,旨在帮助开发者更好地理解和掌握MySQL优化技能。涵盖了从SQL语句层面(比如索引优化、查询重构)、数据库系统配置参数调节(例如 innodb_buffer_pool_size、max_connections)、以及外部应用缓存(如Redis的使用),还提到分区表、规范化和反规范化理论及其实际运用方法等,以求最大程度地挖掘MySQL性能潜力,提供高效的解决方案来应对实际项目遇到的问题。 适用人群:主要面向从事互联网及相关行业工作的数据库管理员(DBA),软件工程师尤其是关注后端系统的架构师或者程序员群体。 使用场景及目标:适用于想要提升MySQL读写效能的企业级Web应用、大数据处理平台以及其他需要高频次读写的业务逻辑环境。同时,文中提供的技巧有助于构建稳定可靠的数据服务平台,在线事务处理(OLTP)应用程序的性能优化方面也有着积极的作用。
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
GS-DHR协同数字化人力资源管理系统白皮书 V8.1(1).ppt
基于SSH的网上购物系统。系统分为前台和后台,主要实现商品分类、商品浏览、加入购物车和生成订单以及网上支付等功能。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
使用DeepSeek写的手机H5贪吃蛇小游戏
VideoDownloadHelper 无120分钟时间限制-高级版
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
Pyecharts炫酷散点图构建指南.md
基于单片机protues仿真的智能饮水机设计带浑浊度+温度显示(仿真图、源代码) 具体实现功能: 1.浑浊度、温度检测并在液晶上显示相应数据; 2. 通过调滑动变阻器大小可以修改浑浊度的实时检测情况; 3. 通过调节DS18B20温度传感器模块上的“+””-“按钮可以改变温度;温度数据的正确与否观察模块上的数据同LCD液晶是否一致; 4.定时提醒功能:按设置键三下进入定时提醒设置,设置好时间后;DS1302模块根据实时显示的时钟情况与闹钟相比较,一致则定时提醒信号灯亮2s; 5.触控传感:用按键模拟,当按键按下,自动出水信号灯亮,松开则暗。
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
基于ThinkPHP6.0开发的微信公众号多域名回调源码 模板Ver:1.0.0。 有如下功能: 微信公众号多域名回调功能:微信公众号后台默认只能授权2个网页域名,用本系统突破这个限制,用同一个公众号对接无限多个网站。网站后台支持回调域名白名单的管理,以及登录记录的查看。 微信access_token获取功能:可让本系统作为中控服务器统一获取和刷新access_token,其他业务逻辑站点所使用的access_token均调用当前站点获取,这样可避免各自刷新造成冲突,导致access_token覆盖而影响业务。 微信消息事件转发功能:微信公众平台/企业微信的服务器设置只能填写1个url,用本系统可以同时转发给多个url。如用户关注事件、用户发送的消息等,可以同时发送给多个服务器站点。 支付宝开放平台多域名回调功能:每个支付宝开发平台应用只能配置1个授权回调域名,用本系统突破这个限制,可同时在多个网站使用同一个支付宝开放平台应用。 源码内附详细部署教程。