首页 文章 精选 留言 我的

精选列表

搜索[android jetpack],共10000篇文章
优秀的个人博客,低调大师

Android Studio第三十八期 - HIOS跳转协议解决URI跳转原生页面并传递参数

代码已经整理好,效果如下图: 图1: 图2: 图3: 地址:https://github.com/geeklx/MyApplication/tree/master/p022_hois HiosRegister: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.example.p022_hois.hioscommon; import com.example.p022_hois.hoisjump.HiosAlias; public class HiosRegister{ private static final StringPKG_SFNATION= "com.example.p022_hois" ; public static void load(){ HiosAlias.register( "jump.twomainactivity" ,PKG_SFNATION, ".activity.TwoMainActivity" ); HiosAlias.register( "jump.webviewmainactivity" ,PKG_SFNATION, ".activity.WebViewMainActivity" ); } } 方法1: 1 2 3 4 5 6 //hiosactivity跳转 AdListItemadListItem= new AdListItem(); adListItem.setAid( "1" ); adListItem.setBanner( "imgUrl" ); adListItem.setUrl( "hios://jump.twomainactivity" ); HiosHelper.click(MainActivity. this ,TwoMainActivity. class ,adListItem); //第一个是当前Activity第二个是Fragment 方法2: 1 2 3 4 5 6 7 //hioswebview跳转 AdListItemadListItem= new AdListItem(); adListItem.setAid( "1" ); adListItem.setBanner( "imgUrl" ); adListItem.setUrl( "" ); HiosHelper.configWebActivity(WebViewMainActivity. class ); HiosHelper.click(MainActivity. this ,adListItem); // 方法3: 1 2 3 4 5 6 7 8 9 //hiosactivity跳转 AdListItemadListItem= new AdListItem(); adListItem.setAid( "1" ); adListItem.setBanner( "imgUrl" ); adListItem.setUrl( "hios://jump.twomainactivity?sku_id={s}1000252" );//带参数 HiosHelper.click(MainActivity. this ,TwoMainActivity. class ,adListItem); //第一个是当前Activity第二个是Fragment //TwoMainActivity接收 mAlertSkuId=getIntent().getStringExtra( "sku_id" ); 总结:还有两个内容还没写出来,这里面有webview的base类经历过洗礼,大家可以用~(爱一个人就要爱他(loader)的全部~)未完待续~ 本文转自 吴雨声 51CTO博客,原文链接:http://blog.51cto.com/liangxiao/1931731,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(4)

成员变量fd指向一个文件描述符,这个文件描述符要么指向帧缓冲区设备,要么指向一块匿名共享内存,取决于它的宿主结构体private_handle_t描述的一个图形缓冲区是在帧缓冲区分配的,还是在内存中分配的。 成员变量magic指向一个魔数,它的值由静态成员变量sMagic来指定,用来标识一个private_handle_t结构体。 成员变量flags用来描述一个图形缓冲区的标志,它的值要么等于0,要么等于PRIV_FLAGS_FRAMEBUFFER。当一个图形缓冲区的标志值等于PRIV_FLAGS_FRAMEBUFFER的时候,就表示它是在帧缓冲区中分配的。 成员变量size用来描述一个图形缓冲区的大小。 成员变量offset用来描述一个图形缓冲区的偏移地址。例如,当一个图形缓冲区是在一块内存中分块的时候,假设这块内存的地址为start,那么这个图形缓冲区的起始地址就为start + offset。 成员变量base用来描述一个图形缓冲区的实际地址,它是通过成员变量offset来计算得到的。例如,上面计算得到的start + offset的值就保存在成员变量base中。 成员变量pid用来描述一个图形缓冲区的创建者的PID。例如,如果一个图形缓冲区是在ID值为1000的进程中创建的,那么用来描述这个图形缓冲区的private_handle_t结构体的成员变量pid的值就等于1000。 结构体private_handle_t的静态成员变量sMagic前面已经描述过了,另外两个静态成员变量sNumInts和sNumFds的值分别等于1和6,表示结构体private_handle_t包含有1个文件描述符和6个整数,它们是用来初始化结构体private_handle_t的父类native_handle_t的成员变量numInts和numFds的,如结构体private_handle_t的构造函数所示。从这里就可以看出,结构体private_handle_t的父类native_handle_t的成员变量data所指向的缓冲区就是由结构体private_handle_t的成员变量fds、magic、flags、size、offset、base和pid所占用的连续内存块来组成的,一共包含有7个整数。 结构体private_handle_t还定义了一个静态成员函数validate,用来验证一个native_handle_t指针是否指向了一个private_handle_t结构体。 至此,Gralloc模块的加载过程以及相关的数据结构体就介绍到这里,接下来我们分别分析定义在Gralloc模块中的gralloc和fb设备的打开过程。 2. gralloc设备的打开过程 在Gralloc模块中,gralloc设备的ID值定义为GRALLOC_HARDWARE_GPU0。GRALLOC_HARDWARE_GPU0是一个宏,定义在文件hardware/libhardware/include/hardware/gralloc.h中, 如下所示: #defineGRALLOC_HARDWARE_GPU0"gpu0" gralloc设备使用结构体alloc_device_t 来描述。结构体alloc_device_t有两个成员函数alloc和free,分别用来分配和释放图形缓冲区。 结构体alloc_device_t 也是定义在文件hardware/libhardware/include/hardware/gralloc.h中, 如下所示: typedefstructalloc_device_t{ structhw_device_tcommon; int(*alloc)(structalloc_device_t*dev, intw,inth,intformat,intusage, buffer_handle_t*handle,int*stride); int(*free)(structalloc_device_t*dev, buffer_handle_thandle); }alloc_device_t; Gralloc模块在在文件hardware/libhardware/include/hardware/gralloc.h中定义了一个帮助函数gralloc_open,用来打开gralloc设备,如下所示: staticinlineintgralloc_open(conststructhw_module_t*module, structalloc_device_t**device){ returnmodule->methods->open(module, GRALLOC_HARDWARE_GPU0,(structhw_device_t**)device); } 参数module指向的是一个用来描述Gralloc模块的hw_module_t结构体,它的成员变量methods所指向的一个hw_module_methods_t结构体的成员函数open指向了Gralloc模块中的函数gralloc_device_open。 函数gralloc_device_open定义在文件hardware/libhardware/modules/gralloc/gralloc.cpp文件中,如下所示: structgralloc_context_t{ alloc_device_tdevice; /*ourprivatedatahere*/ }; ...... intgralloc_device_open(consthw_module_t*module,constchar*name, hw_device_t**device) { intstatus=-EINVAL; if(!strcmp(name,GRALLOC_HARDWARE_GPU0)){ gralloc_context_t*dev; dev=(gralloc_context_t*)malloc(sizeof(*dev)); /*initializeourstatehere*/ memset(dev,0,sizeof(*dev)); /*initializetheprocs*/ dev->device.common.tag=HARDWARE_DEVICE_TAG; dev->device.common.version=0; dev->device.common.module=const_cast<hw_module_t*>(module); dev->device.common.close=gralloc_close; dev->device.alloc=gralloc_alloc; dev->device.free=gralloc_free; *device=&dev->device.common; status=0; } ...... returnstatus; } 这个函数主要是用来创建一个gralloc_context_t结构体,并且对它的成员变量device进行初始化。结构体gralloc_context_t的成员变量device的类型为gralloc_device_t,它用来描述一个gralloc设备。前面提到,gralloc设备是用来分配和释放图形缓冲区的,这是通过调用它的成员函数alloc和free来实现的。从这里可以看出,函数gralloc_device_open所打开的gralloc设备的成员函数alloc和free分别被设置为Gralloc模块中的函数gralloc_alloc和gralloc_free,后面我们再详细分析它们的实现。 至此,gralloc设备的打开过程就分析完成了,接下来我们继续分析fb设备的打开过程。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/967071,如需转载请自行联系原作者

优秀的个人博客,低调大师

Tegra3 vSMP架构Android运行时CPU热插拔及高低功耗CPU切换

Tegra3采用vSMP(VariableSymmetric Multiprocessing)架构,共5个cortex-a9处理器,其中4个为高性能设计,1个为低功耗设计: 在系统运行过程中,会根据CPU负载切换低功耗处理器和高功耗处理器: 除此之外,4个高性能ARM核心也会根据运行情况,动态借用Linux kernel支持的CPU hotplug进行CPU的UP/DOWN操作。 动态切换主处理器和Companion 处理器借用的是软硬件配套的CPU Governor 和 CPU Management Logic。 我们用华硕EeePad运行高负载,低负载应用,通过dmesg查看内核消息也确实验证了多核的热插拔以及主ARM和LP ARM之间的动态切换。 CPU hotplug记录: <4>[104626.426957] CPU1: Booted secondary processor <7>[104627.427412] tegra CPU: force EDP limit 720000 kHz <4>[104627.427670] CPU2: Booted secondary processor <4>[104628.537005] stop_machine_cpu_stop cpu=0 <4>[104628.537017] stop_machine_cpu_stop cpu=2 <4>[104628.537059] stop_machine_cpu_stop cpu=1 <4>[104628.537702] __stop_cpus: wait_for_completion_timeout+ <4>[104628.537810] __stop_cpus: smp=0 done.executed=1 done.ret =0- <5>[104628.537960] CPU1: clean shutdown <4>[104630.537092] stop_machine_cpu_stop cpu=0 <4>[104630.537172] stop_machine_cpu_stop cpu=2 <4>[104630.537739] __stop_cpus: wait_for_completion_timeout+ <4>[104630.538060] __stop_cpus: smp=0 done.executed=1 done.ret =0- <5>[104630.538203] CPU2: clean shutdown <4>[104631.306984] tegra_watchdog_touch 高性能处理器和低功耗处理器切换: <3>[104666.799152] LP=>G: prolog 22 us, switch 2129 us, epilog 24 us, total 2175 us <3>[104667.807273] G=>LP: prolog 18 us, switch 157 us, epilog 25 us, total 200 us <4>[104671.407008] tegra_watchdog_touch <4>[104671.408816] nct1008_get_temp: ret temp=35C <3>[104671.939060] LP=>G: prolog 17 us, switch 2127 us, epilog 22 us, total 2166 us <3>[104672.938091] G=>LP: prolog 18 us, switch 156 us, epilog 24 us, total 198 us 本文转自 21cnbao 51CTO博客,原文链接:http://blog.51cto.com/21cnbao/768381,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册