自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Y敲键盘的地方

In Coding We Trust

  • 博客(324)
  • 资源 (15)
  • 收藏
  • 关注

原创 第16章 错误处理与韧性——优雅地失败

摘要 本文深入探讨了分布式系统中的错误处理与韧性设计,以Claude Code为例展示了优雅处理故障的工程实践。核心内容包括: 错误分类策略:将API错误分为瞬时、永久和可恢复三类,采用策略模式实现清晰的错误判断逻辑 重试机制: 指数退避算法:BASE_DELAY_MS * 2^(n-1) + 随机抖动 熔断保护:连续529错误达阈值时触发降级 上下文压缩:自动检测413错误,通过isPromptTooLongMessage判断并触发消息压缩流程 中断处理:使用AbortController实现级联取消,确

2026-06-25 07:15:00 326

原创 第15章 状态管理与持久化——记忆的艺术

状态管理与持久化是构建有状态应用的核心挑战。Claude Code 通过精心设计的分层持久化策略、异步与同步的平衡、缓存与失效机制,以及容错与恢复机制,在无状态的 LLM 基础上构建出了一个仿佛有"记忆"的智能助手。这个设计不仅满足了当前的功能需求,也为未来的扩展留下了充足的空间。正如图书馆的价值不仅在于存储书籍,更在于如何组织、检索和更新它们一样,Claude Code 的真正力量也来自于其精心设计的状态管理系统。

2026-06-24 21:48:09 329

原创 第14章 可扩展性设计——插件、Skill与MCP

文章摘要 Claude Code 通过三层扩展架构实现高度可扩展性:插件系统实现条件加载,Skill 系统封装复杂工作流,MCP 协议集成外部服务。核心设计包括:1) 基于环境变量和功能标志的动态加载,利用死代码消除优化性能;2) 延迟加载函数解决循环依赖问题;3) 中心化工具注册表统一管理。这种模块化设计使得系统既能保持核心简洁,又能灵活扩展功能,类似乐高积木的组合方式,通过标准化接口实现无限可能的功能扩展。

2026-06-24 21:47:28 314

原创 第13章 性能优化——毫秒级的启动艺术

性能优化:毫秒级启动的艺术 Claude Code 通过系统化的性能优化策略实现了毫秒级启动速度。关键技术包括: 1. 并行预取 在模块加载前启动 MDM 和 Keychain 读取操作 让 I/O 操作与模块加载并行执行 macOS 上通过并行执行 plutil 命令读取多个 plist 文件 2. 懒加载 按需加载资源而非启动时全量加载 减少启动时间和内存占用 3. 功能标志优化 利用 feature() 函数实现编译时死代码消除 减少打包体积和内存占用 4. 多层缓存 从函数级到系统级的缓存策略 包含

2026-06-09 12:15:00 269

原创 第12章 多Agent协作——从单体到集群

本文探讨了Claude Code系统中的多Agent协作机制。核心创新在于"Agent即工具"的设计理念,将Agent与工具统一抽象,实现递归组合和透明交互。系统通过任务状态机(包含7种任务类型和5种状态)管理Agent生命周期,并采用递归深度控制确保稳定性。关键技术实现包括:带类型前缀的安全ID生成机制、基于特性标志的任务注册系统、以及防止状态污染的守卫函数设计。这些机制共同构成了一个高度灵活、可扩展的多Agent协作框架,使不同层级的Agent能够像交响乐团般协同工作,完成复杂任务。系统特别注重安全性和

2026-06-09 07:15:00 536

原创 第11章 权限与安全——信任的边界

Claude Code权限系统设计解析 摘要:Claude Code的权限系统基于最小权限原则,在安全性和可用性间取得平衡。系统提供四种权限模式(default/plan/auto/bypassPermissions),通过ToolPermissionContext实现细粒度控制,包含工作目录访问、规则集合等关键参数。源码分析揭示了多项安全设计:不可变权限上下文、任务类型权限隔离、终端状态判断机制、安全的任务ID生成算法,以及成本追踪与权限的关联。系统默认采用保守策略(如空上下文禁用绕过模式),体现了安全优

2026-06-09 01:00:00 226

原创 第10章 上下文工程——有限窗口的无限智慧

想象你正在准备一次长途旅行,但你只有一个行李箱,容量有限。你需要精心选择每一件物品,既要确保必需品齐全,又要避免超重。这就是上下文工程的本质——在有限的 token 窗口内,为 AI 提供最相关、最有价值的信息。Claude Code 面临着一个根本性的约束:上下文窗口。尽管现代 LLM 支持 200K tokens 的上下文,但这仍然是一个稀缺资源。每次对话都需要在这个有限的窗口中平衡系统指令、用户意图、项目代码、历史消息等多种信息。如何高效地收集、组织和压缩这些信息,成为了一个复杂而优雅的工程问题。

2026-06-08 20:23:13 317

原创 第9章 工具调用循环——Agent的行动闭环

管理状态:使用 State 对象封装跨轮次的状态流式处理:使用异步生成器优雅地处理流式响应并发控制:通过标记控制工具并发错误恢复:在多个层次实现错误恢复机制性能优化:通过预取、压缩、缓存等优化性能就像厨师的烹饪流程一样,工具调用循环不断循环:准备食材(上下文)、烹饪(工具调用)、品尝(获取结果)、调整(继续对话),直到完成菜品(任务完成)。它的设计体现了软件工程中的诸多最佳实践:状态机设计、流式处理、并发控制、错误恢复等。

2026-05-28 21:09:09 272

原创 第8章 查询引擎——LLM交互的心脏

摘要 QueryEngine是Claude Code AI编程助手的核心组件,负责管理与LLM的交互过程。本章深入解析其设计原理和实现机制: 状态管理:作为有状态对象,QueryEngine维护对话历史、Token使用量、中断控制等状态,确保对话连续性。 异步生成器:采用submitMessage()异步生成器实现流式响应,支持逐步输出结果和外部中断控制。 权限控制:通过装饰器模式包装权限检查函数,记录权限拒绝情况。 提示词构建:分层组合系统提示词,包括基础提示、用户上下文、内存机制等模块。 成本控制:跟踪

2026-05-26 00:15:00 406

原创 第7章 响应式终端UI

摘要 Claude Code通过React和Ink框架构建了响应式终端UI,解决了传统CLI应用的交互限制。该系统采用以下关键技术: 渲染器包装:通过ink.ts封装Ink渲染器,提供主题支持、统一接口和类型安全 组件化设计:导出Box、Text等基础组件,构建终端设计系统 状态管理:使用AppState集中管理终端状态,包括视图状态、选择索引等 Hooks应用:实现useCostSummary等自定义Hook处理终端特有逻辑 性能优化:通过虚拟终端和智能重绘机制解决终端渲染性能问题 这套方案将现代前端开发

2026-05-25 19:33:51 452

原创 第6章 类型驱动开发

文章摘要 本文深入探讨了TypeScript类型驱动开发在大型项目Claude Code中的应用。重点分析了泛型设计、Zod Schema验证和高级类型工具的使用。文章展示了如何通过Tool<Input, Output, Progress>泛型实现类型安全,利用Zod进行运行时验证和类型推断,以及结合Schema驱动的开发模式。特别介绍了延迟Schema初始化、Feature Flags支持和类型推断等高级技巧,这些方法在512000行代码规模的项目中有效提升了代码质量和开发效率。类型系统不仅作为文档,更成

2026-05-23 22:32:53 493

原创 第5章 模块化设计

Claude Code 的模块化设计展示了现代 TypeScript 工程的最佳实践。通过 Feature Flags 实现条件加载,通过懒加载打破循环依赖,通过注册表模式统一管理工具,通过 MCP 协议支持动态扩展。这些技术的综合应用,使 Claude Code 能够在保持代码清晰的同时,支持复杂的功能需求和灵活的部署环境。模块化设计的核心在于平衡:平衡灵活性和复杂度,平衡性能和可维护性,平衡统一性和扩展性。Claude Code 的实践为我们提供了一个优秀的范例。

2026-05-14 20:56:18 438

原创 第4章 分层架构

本文深入解析了Claude Code的五层架构设计。该系统采用分层架构模式,将复杂功能分解为清晰的责任层次: CLI层:基于React+Ink构建的命令行界面,负责用户交互和命令解析 查询引擎层:核心业务逻辑,管理对话流程和状态机 工具命令层:实现工具的注册、管理和执行 服务层:提供API服务、文件服务等基础设施 基础设施层:处理状态管理、费用追踪等底层功能 这种分层设计使系统具备模块化、可测试和可扩展等优势,ToolUseContext作为关键类型贯穿各层,确保上下文信息的一致传递。

2026-04-28 19:00:54 419

原创 第3章 对话即编程

摘要 Claude Code 提出了"对话即编程"的革命性范式,将传统编程从显式编码转变为自然语言交互。其核心引擎通过QueryEngine和状态机循环实现: 范式转变:从REPL的"编写代码"到AI对话的"描述意图",用户只需关注目标而非实现细节。 上下文感知:系统自动收集git状态、项目文档等上下文信息,为AI提供完整环境认知。 状态机架构:query.ts实现了复杂的状态流转,管理从用户输入到AI响应的全流程,包括预处理、LLM查询、工具调用

2026-04-27 20:42:27 500 1

原创 第2章:一切皆工具

摘要 本文探讨了从传统命令行工具到AI智能体的范式转变。传统CLI工具基于确定性执行,具有固定的参数和预定义行为,而AI工具引入了概率性推理,能够理解语义意图并动态调整行为。Claude Code通过融合Commander.js的命令行框架与Ink的React UI渲染引擎,实现了渐进式智能化设计:传统命令与AI命令并存,既保留确定性优势又提供智能推理能力。这种架构转变的核心是从参数列表到语义描述的工具定义范式转移,使工具能够接受灵活输入并根据上下文提供智能响应。

2026-04-20 19:57:28 446

原创 第1章:从命令行到智能体

摘要 本文探讨了从传统命令行工具到AI智能体的范式转变。传统CLI工具基于确定性执行,具有固定的参数和预定义行为,而AI工具引入了概率性推理,能够理解语义意图并动态调整行为。Claude Code通过融合Commander.js的命令行框架与Ink的React UI渲染引擎,实现了渐进式智能化设计:传统命令与AI命令并存,既保留确定性优势又提供智能推理能力。这种架构转变的核心是从参数列表到语义描述的工具定义范式转移,使工具能够接受灵活输入并根据上下文提供智能响应。

2026-04-16 21:09:17 451

原创 突发!Claude Code源码泄露,⽤GPT拆了⼀份10w字的逐模块拆解报告(附源码)

2026-04-01 00:44:51 102

原创 问一下ChatGPT如何学习开发iOS应用程序

Stanford CS193P iOS开发课程:https://cs193p.sites.stanford.edu/Apple官方开发者文档:https://developer.apple.com/documentation/学习基本的iOS应用程序框架和库,例如UIKit、Core Data和Foundation。学习Swift编程语言或Objective-C编程语言。开始编写简单的iOS应用程序,并逐渐提高难度。学习Xcode IDE和iOS开发工具。

2023-06-06 21:56:55 1575

原创 问一下ChatGPT如何接手一个历史悠久的iOS 应用

接手一个历史悠久的 iOS 应用可能需要你面对大量复杂的代码和文档,下面是一些建议:

2023-06-06 21:52:31 485

原创 结合平时的使用经历,说说Edge浏览器的使用体验及优缺点

Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能,为用户带来更加流畅的浏览体验。Edge最近推出了分屏功能,支持一个窗口同时显示两个选项卡,这可以大大提高生产力和多任务处理能力。欢迎大家使用分屏及其他新功能后分享自己的使用心得与建议。

2023-05-06 14:12:06 6547 2

原创 如何设计接口协议,实现一个优秀SDK

Software Development Kit,支付包 SDK,微博 SDK等,接口设计规范

2022-12-20 21:34:09 2463

原创 聊聊跨端技术

起初,移动互联网浪潮起来时候,iOS和Android智能手机普及,这两个平台上开发用到技术同一称为Native,就是通过平台提供的工具包进行应用的开发。我们知道,应用是需要更新才可以用到新功能,感谢产品经理没日没夜的加班,让我越来越觉得第一个版本是最好的。但是为了让最新的更新触达你手中的APP,技术人员被迫无所不用其极。然后就有了H5,weex,小程序,Flutter等等。这些技术的特点主要是磨平了平台属性,让你不管是Android或者iOS,技术人员写的代码都照样运行。总而言之,是技术人员为了偷懒觉卷出

2022-06-21 23:30:02 874

原创 Dart语言中有意思的地方

Hello worldvoid main() { print('Hello, World!');}变量Dart 是类型安全语言,支持类型推断,因此大多数变量不需要显式指定类型var name = 'This is a var';var year = 2022;var cost = 100.2;var fruits = ['apple', 'orange', 'mango', 'banana'];var image = { 'tags':'color', 'url'

2022-05-16 20:47:49 614

原创 当谈空安全的时候,我们在谈什么?

什么是空安全当你选择使用空安全时,代码中的类型将默认是非空的,意味着 除非你声明它们可空,它们的值都不能为空。有了空安全,原本处于你的 运行时 的空值引用错误将变为 编辑时 的分析错误。空安全有什么用没有空安全之前,想象自己写过多少形如 if(a != null) {} 的代码,又多少次因为忘记写而导致用户使用过程发生crash从而造成应用程序闪退,如果一个应用出现异常,可以快速对它进行处理而不被用户察觉,这种体验才是负责人的,用户不希望看到异常。看到程序崩溃,用户不开心,开发者也不会开心。而空安

2022-05-16 20:22:17 555

原创 Y的十年职业生涯小结(2012-2022)

Y的十年职业生涯小结(2012-2022)2012毕业至今,刚好十年。1. 移动互联网浪潮当时的我并不知道,这十年,移动互联网的十年,是这么一段波澜壮阔,荡气回肠的历史。很少人能想到,iPhone和Android的横空出世,能掀起这么巨大的移动互联网浪潮,能给人们生活方式和习惯带来如此翻天覆地的变化。2007年第一代iPhone发布。2008年,中国的互联网人口第一次超过了美国。这年10月,第一部Android手机发布。2009年夏天,魅族的第一款手机正式发布。同时,这款被称为“山寨iPho

2022-02-16 21:25:31 8959 1

原创 C#语言入门

C#语言入门C#基础语法C#类和对象C#类的定义C#访问修饰符C#方法的定义C# get和setC#构造函数C#析构函数C#方法重载C#方法的参数C# lambda表达式C#递归C#嵌套类C# partial部分类详解C# Console类:控制台输入输出C# Math类C# Random类C# DateTime类TODOMoreC#基础语法C#基本语法知识using System;namespace DemoCSharp{ class Program { sta

2021-12-28 21:32:21 660

原创 互联网公司中一个业务的衰落有哪些征兆

文章目录前言1.高管的频繁变动2.不断强调控制成本3.hr开始抓考勤4.盘点团队人员年龄分布5.年终奖打折6.发不出工资7.忽然很闲8.宣传狼性文化9.周围同事开始有离职10.办公室氛围不对总结前言相比起传统企业,互联网企业向来以“快”著称,天下武功,唯快不破。有一个构想,快速出Demo,快速验证,快速融资,快速招人,快速扩大规模,快速占有时长。但是不是每一次尝试都成功,于是乎,失败也快,快速控制成本,设置快速砍掉业务,快速精简人员,那么,一般在大的互联网公司里面,一个业务衰落都有哪些征兆呢1.

2021-11-22 22:16:16 709

原创 Kotlin入门

目录发展历程主营业务公司市值发展方向公司愿景发展历程2005年Roblox Beta版上线2009年Roblox开启商业化进程2013年Roblox允许作者参与平台分成2016年,50万创作者,500万款游戏作品,月活用户3000万,头部开发者月入5万美金。2017年,170万创作者,2200万款游戏作品,月活用户4800万,获9200万美元融资。2018年,400万创作者,4000万款游戏作品,月活用户7000万,获1.5亿美元融资,头部创造者年收入最高能超过300万美元。移动端累计收入

2021-11-16 23:12:44 1892

原创 关于开发语言个人随想

2012年毕业,当时银行的岗位是香饽饽,上来就是年薪十万,当时班上三分之一人进了银行,做开发或者干脆不做开发了。还有三分之一干脆不干这行了。剩下的三分之一,进入了IT行业。当时的我跟随大家,投了几个简历,当时市面上诺基亚还是如日中天,刚有智能手机,觉得新鲜,Google开源了Android系统,一下子大家在谈论智能手机这个新事物,并且这玩意学习门槛低。到金山WPS实习了三个月,回到广州一家做APP的公司上班,现在回头看,当时懵懵懂懂的,赶上的正式轰轰烈烈的移动互联网大潮。2022年...

2021-11-11 23:35:55 2851

原创 程序员的层级

一个合格的程序员:能理解需求能实现需求能修复验收需求过程中发现的BUG一个有专业素养的程序员:动手写代码前,花时间进行设计除了实现需求功能,能考虑到性能不满足于将代码写完,同时有文档和单元测试知道对上线业务进行多维度的监控以保证稳定性对线上异常进行及时处理并沉淀出更优方案一个优秀的程序员:动手前写代码前,花更多的时间设计同一个功能实现能想出上中下三种策略方案,进行推演并且因地制宜的选择最合适的方案执行能学习并且尝试运用新技术来提高工作效率不贰过,坑不重复踩能举一反

2021-11-09 20:58:02 3540

原创 牛逼公司系列——Netflix

前言Netflix是一家什么样的公司?为什么说是一个商业奇迹?Netflix用了22时间从一家传统的DVD租赁公司发展成为最成功的的全球化媒体公司,当前市值高达2944亿美元,不仅是过去十年全球商业上最成功的企业之一,也被评为改变人类影视消费模式的颠覆性企业。而这个过程当中,数据起到了最核心的作用,是Netflix最核心的竞争力之一。NetFlix的历史Netflix的名字来源于英文单词 Net 和 电影的俚语 Flicks 的缩写 Flix,加起来就是网络电影的意思。创始人 Marc Rand

2021-10-25 21:42:51 2859

转载 Google检索技巧大全

作者:谷峰一、GOOGLE简介Google是一个搜索引擎,由两个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc. 于1999年创立。2000年7月份,Google替代Inktomi成为Yahoo公司的搜索引擎,同年9月份,Google成为中国网易公司的搜索引擎。98年至今,GOOGLE已经获得30多项业界大奖。二、GOOGLE特色GOOGLE支持多达132种语言,包括简体中文和繁体中文;GOOGLE网站只提供搜索引擎功能,没有花里胡哨的累赘

2021-08-31 11:03:51 1544

原创 一切在于链接

一切在于触达用户,与用户建立链接,产生互动,链接越多,用户越依赖,产生的价值越大

2021-07-13 22:19:40 383

原创 妹子问,“你们工程是怎么跑起来的?”

经过两天文档和业务熟悉,妹子终于按捺不住寂寞,小心翼翼的问了一句,“你们工程是怎么跑起来的?”咋听起来,好像一下子新同学水平真的不怎么样,怎么连代码都跑不起来。但是细想一下,自己不也是这么过来的,所谓的团队文档,从写下那一刻起就已经是过时的了,加上研发人员对于文档的态度,基本上是能不写就不写。除了仓库地址(有些团队文档甚至连基本的信息,例如仓库地址都没有),现在国内稍微大一点的APP都分模块开发,多人协助情况下不同公司不同团队用的技术栈,协同方案不一样,国内技术团队特点就是永远有自己特色,拿And

2021-07-08 19:54:33 327

原创 研发团队终于来了一个妹子

研发团队来了一个妹子太阳没有从西边出来,研发团队终于招来一个人,这年头,招一个人不容易,更不容易的是,还是一个妹子。大周一的早上,一改以往昏沉的气氛,群里活跃至极。电话终于响了,来到公司楼下,好几个忍不住抢着下楼迎接。协助帮忙办理入职手续领电脑,现在新员工入职配置的都是Mac最新版了,羡慕新同事介绍。一说是妹子大家自我介绍都特别积极一点午饭时间,按惯例都请人家妹子到外面下馆子,第一顿就食堂就太没诚意了吃饭完午休时间已经过去了,回到工位上,告诉妹子wifi密码之类的信息每到一个新岗位,总有

2021-07-05 22:10:07 436

原创 移动DevOps思考

# 目标提高研发效率,保证质量# 未来规划产品化,商业化,服务更多App产品,更多研发团队

2021-06-05 16:34:23 539 2

原创 如何写好一篇技术文章

如何写好一篇技术文章为什么技术人需要写文章,写文章有什么好处能者为师,写文章是技术人员进阶的路径之一沉淀更多,做得多有更多的体会,写得多有更多沉淀锻炼自己抽象能力,结构化思维能力,系统思维能力提升自己影响力写文章方法和技巧文章是思维的表达,思维要能结构化,表达要有逻辑性;确定文章主旨,要讲什么,围绕中心来展开,尽量把内容写得深入浅出尽量引起读者共鸣,对读者有帮助或者能触动读者写作过程要清楚,文章除了给别人看,希望能帮到别人,更多是和自己对话的过程,期间要反复问自己:

2021-05-20 21:36:55 438

原创 Android注解处理器APT技术简介

Android注解处理器APT技术简介APT是什么例子APT有什么用 (好处)APT原理 (为什么)APT实践 (怎么做)参考APT是什么APT全称“Annotation Processing Tool”,即注解处理器,是javac的一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,并根据注解自动生成代码,帮助开发者减少了很多重复代码的编写。例子很多著名的框架用到APT的思想,通过注解编译期间自动生成代码,简化使用ButterknifeDraggerRoom另外,

2021-05-19 20:22:24 887

原创 Glide java.io.IOException(File unsuitable for memory mapping)

异常信息03-06 14:43:26.656 W/Glide ( 852): class com.bumptech.glide.load.engine.GlideException: Failed to load resource03-06 14:43:26.656 W/Glide ( 852): There were 2 causes:03-06 14:43:26.656 W/...

2020-03-10 23:16:00 5930 2

原创 Android图片内存优化-Android 8.0上通过HARDWARE模式加载图片

背景Android上内存优化可以做的有很多,其中图片的内存内存优化往往是最先考虑的几个方面之一,主要源于图片的内存占用多。分析一张Bitmap的内存占用大小跟什么有关系?图片在内存中的大小的计算方式是:图片长(px) x 图片宽(px) x 单位像素占用的字节数Android中不同的图片格式,他的单位像素占用的字节数不同。图片格式总共有四种:Bitmap.Config = ALPH...

2020-02-24 21:39:25 2147

android开发使用例子

/** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); //快捷方式的名称 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); shortcut.putExtra("duplicate", false); //不允许重复创建 //指定当前的Activity为快捷方式启动的对象: 如 //com.everest.video.VideoPlayer //注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序 ComponentName comp = new ComponentName(this.getPackageName(), "."+this.getLocalClassName()); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); //快捷方式的图标 ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes); sendBroadcast(shortcut); } /** * 删除程序的快捷方式 */ private void delShortcut(){ Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT"); //快捷方式的名称 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); //指定当前的Activity为快捷方式启动的对象: 如 //com.everest.video.VideoPlayer //注意: ComponentName的第二个参数必须是完整的类名(包名+类名),否则无法删除快捷方式 String appClass = this.getPackageName() + "." +this.getLocalClassName(); ComponentName comp = new ComponentName(this.getPackageName(), appClass); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); sendBroadcast(shortcut); } 全屏显示 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 横竖屏显示 private void changedScreen(){ int request = this.getRequestedOrientation(); if(request == -1){ Toast.makeText(TaskRunActivity.this, "None 1", Toast.LENGTH_SHORT).show(); }else{ if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } } 获取手机分辩率 DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels; 图形用户界面 文本框(TextView) 列表(ListView) 卷轴视图(ScrollView) 编辑框(EditText) 按钮(Button) 下载列表(Spinner) 多项选择(CheckBok) 图形用户界面 菜单(Menu) 提示(toast) 对话框(Dialog) 日期(DatePicker) 时间(TimePicker) 单项选择(RadioGroup RadioButton) 图形用户界面 线性布局(LinearLayout) 相对布局(RelativeLayout) 绝对布局(AbsoluteLayout) 表格布局(TableLayout) 数据据存储 系统偏好 文件 网络 数据库 显示网页: 1. Uri uri = Uri.parse("http://www.google.com"); 2. Intent it = new Intent(Intent.ACTION_VIEW,uri); 3. startActivity(it); 显示地图: 1. Uri uri = Uri.parse("geo:38.899533,-77.036476"); 2. Intent it = new Intent(Intent.Action_VIEW,uri); 3. startActivity(it); 路径规划: 1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en"); 2. Intent it = new Intent(Intent.ACTION_VIEW,URI); 3. startActivity(it); 拨打电话: 调用拨号程序 1. Uri uri = Uri.parse("tel:xxxxxx"); 2. Intent it = new Intent(Intent.ACTION_DIAL, uri); 3. startActivity(it); 1. Uri uri = Uri.parse("tel.xxxxxx"); 2. Intent it =new Intent(Intent.ACTION_CALL,uri); 3. 要使用这个必须在配置文件中加入<uses-permission id="Android.permission.CALL_PHONE" /> 发送SMS/MMS 调用发送短信的程序 1. Intent it = new Intent(Intent.ACTION_VIEW); 2. it.putExtra("sms_body", "The SMS text"); 3. it.setType("vnd.android-dir/mms-sms"); 4. startActivity(it); 发送短信 1. Uri uri = Uri.parse("smsto:0800000123"); 2. Intent it = new Intent(Intent.ACTION_SENDTO, uri); 3. it.putExtra("sms_body", "The SMS text"); 4. startActivity(it); 发送彩信 1. Uri uri = Uri.parse("content://media/external/images/media/23"); 2. Intent it = new Intent(Intent.ACTION_SEND); 3. it.putExtra("sms_body", "some text"); 4. it.putExtra(Intent.EXTRA_STREAM, uri); 5. it.setType("image/png"); 6. startActivity(it); 发送Email 1. 2. Uri uri = Uri.parse("mailto:xxx@abc.com"); 3. Intent it = new Intent(Intent.ACTION_SENDTO, uri); 4. startActivity(it); 1. Intent it = new Intent(Intent.ACTION_SEND); 2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com"); 3. it.putExtra(Intent.EXTRA_TEXT, "The email body text"); 4. it.setType("text/plain"); 5. startActivity(Intent.createChooser(it, "Choose Email Client")); 1. Intent it=new Intent(Intent.ACTION_SEND); 2. String[] tos={"me@abc.com"}; 3. String[] ccs={"you@abc.com"}; 4. it.putExtra(Intent.EXTRA_EMAIL, tos); 5. it.putExtra(Intent.EXTRA_CC, ccs); 6. it.putExtra(Intent.EXTRA_TEXT, "The email body text"); 7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 8. it.setType("message/rfc822"); 9. startActivity(Intent.createChooser(it, "Choose Email Client")); 添加附件 1. Intent it = new Intent(Intent.ACTION_SEND); 2. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 3. it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/mysong.mp3[/url]"); 4. sendIntent.setType("audio/mp3"); 5. startActivity(Intent.createChooser(it, "Choose Email Client")); 播放多媒体 1. 2. Intent it = new Intent(Intent.ACTION_VIEW); 3. Uri uri = Uri.parse("[url=]file:///sdcard/song.mp3[/url]"); 4. it.setDataAndType(uri, "audio/mp3"); 5. startActivity(it); 1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); 2. Intent it = new Intent(Intent.ACTION_VIEW, uri); 3. startActivity(it); Uninstall 程序 1. Uri uri = Uri.fromParts("package", strPackageName, null); 2. Intent it = new Intent(Intent.ACTION_DELETE, uri); 3. startActivity(it); //调用相册 public static final String MIME_TYPE_IMAGE_JPEG = "image/*"; public static final int ACTIVITY_GET_IMAGE = 0; Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); getImage.addCategory(Intent.CATEGORY_OPENABLE); getImage.setType(MIME_TYPE_IMAGE_JPEG); startActivityForResult(getImage, ACTIVITY_GET_IMAGE); //调用系统相机应用程序,并存储拍下来的照片 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); time = Calendar.getInstance().getTimeInMillis(); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment .getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg"))); startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE); uninstall apk Uri uninstallUri = Uri.fromParts("package", "xxx", null); returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); install apk Uri installUri = Uri.fromParts("package", "xxx", null); returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); play audio Uri playUri = Uri.parse("[url=]file:///sdcard/download/everything.mp3[/url]"); returnIt = new Intent(Intent.ACTION_VIEW, playUri); //发送附件 Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/eoe.mp3[/url]"); sendIntent.setType("audio/mp3"); startActivity(Intent.createChooser(it, "Choose Email Client")); //搜索应用 Uri uri = Uri.parse("market://search?q=pname:pkg_name"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); //where pkg_name is the full package path for an application //进入联系人页面 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(People.CONTENT_URI); startActivity(intent); //查看指定联系人 Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id联系人ID Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(personUri); startActivity(intent); 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下面这两段代码,分别介绍了TCP/UCP通过的一个实例: 代码一: private void tcpdata() { try { Socket s = new Socket("192.168.0.25", 65500); // outgoing stream redirect to socket OutputStream out = s.getOutputStream(); // 注意第二个参数据为true将会自动flush,否则需要需要手动操作out.flush() PrintWriter output = new PrintWriter(out, true); output.println("Hello IdeasAndroid! 伪IP为:" + SIMCardToIP("13512345006")); InputStream inputStream = s.getInputStream(); DataInputStream input = new DataInputStream(inputStream); byte[] b = new byte[10000]; int length = input.read(b); inputReader = new InputStreamReader(inputStream); String Msg = new String(b, 0, length, "gb2312"); Toast.makeText(TcpTest.this, Msg, 1000).show(); Log.d("Tcp Demo", "message From Server:" + Msg); s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 下面的代码是UDP通讯的过程: public String send(String msg) { StringBuilder sb = new StringBuilder(); InetAddress local = null; try { local = InetAddress.getByName("192.168.0.25"); // 本机测试 } catch (UnknownHostException e) { e.printStackTrace(); } try { dSocket = new DatagramSocket(); // 注意此处要先在配置文件里设置权限,否则会抛权限不足的异常 } catch (SocketException e) { e.printStackTrace(); } int msg_len = msg == null ? 0 : msg.length(); DatagramPacket dPacket = new DatagramPacket(msg.getBytes(), msg_len, local, SERVER_PORT); try { dSocket.send(dPacket); } catch (IOException e) { e.printStackTrace(); } try { dSocket.receive(dPacket); sb.append(new String(dPacket.getData())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } dSocket.close(); return sb.toString(); }

2011-08-29

公司访客登记系统(JavaBean+Servlet+MySql)

题目:公司访客登记系统 1、系统介绍:公司访客登记系统可以用来随时记录来访者信息,并能进行查询和统计功能。 2、系统功能性需求: 系统要操作简单方便,让公司内部的所有人都可以使用。大致功能如下: 1) 添加客户信息 2) 修改客户信息 3) 删除客户信息 4) 检索查询客户信息 5) 具有分类统计功能。

2011-06-03

JuSNS聚网社区管理系统 v2.0.5 源码版

JuSNS聚网社区管理系统 v2.0.5 源码版

2010-12-04

Android基础教程扫描版.pdf

Android基础教程扫描版.pdf 适合入门

2012-03-04

几个html5网站代码

几个html5网站代码模板,仅供参考学习

2012-02-08

java网络编程入门书籍

关于java 方面 的网络编程,适合入门者

2011-08-24

关于Spring的一点资料

关于spring的基本书籍资料,希望有帮助

2011-10-19

jdk1.5的泛型实现

关于泛型的理解,深入,有助于深入理解java

2011-10-19

EclipseMe中文文档

一本用于javaMe开发的实用手册,里边图文并茂介绍了不少实用性操作,适合新老开发者

2011-08-18

java的核心技术:面向对象编程

java的核心技术:面向对象编程 基础入门教程

2011-10-19

设计模式——java语言中的应用

关于设计模式的入门资料,java语言的通俗应用

2011-08-17

个人博客系统项目毕业设计(代码及论文)

利用java写的个人博客系统项目毕业设计(代码及论文)

2012-02-08

Android学习讲义各大学全收录系列下载列表

Android学习讲义各大学全收录系列下载列表

2011-08-28

c数据结构算法,含有基本的数据结构算法

有关c的多种算法 大部分是属于基础的数据结构 适合刚入门的菜鸟

2010-05-18

JAVA 5.0 TIGER程序高手秘笈

java高手秘笈详细讲解了java底层的一点事 StringBuilder Generic的使用 Enum的创建,使用和如何用它来设计程序 enumerated类型牵涉到的三个基本组件 enum关键字 新类型的名称 此类型所允许的各个值 enum能够使你摆脱大部分的public static final变量声明 Autoboxing 和Unboxing vararge 可变参数 类型...数组名 Annotation @Override @Deprecated for/in 静态的import 格式化 Formatter Thread

2011-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除