onCreate的savedInstanceState和onRestoreInstanceState 方法的区别。

Android Activity数据保存与横竖屏切换处理 在Android开发中,Activity生命周期管理是构建稳定应用的基础。当设备配置变更如横竖屏切换时,系统默认会销毁并重建Activity,此时通过onSaveInstanceState()和onRestoreInstanceState()机制可保存临时数据。Bundle作为轻量级容器,适合存储简单类型和可序列化对象,但需注意50KB大小限制。ViewModel作为架构组件,能更优雅地处理配置变更时的数据持久化,结合LiveData实现数据与UI的自动同步。实际开发中还需考虑Fragment状态保存、异步 阅读详情

总结了下:


oncreate是在onstart之前执行是activity声明周期,而onRestoreInstanceState 是在onstart之后onresume之前执行。

stackoverflow上看到的一个比较好的解释:

onRestoreInstanceState is redundant because you can easily restore state in onCreate.
Having said that here is what the official doc says for onRestoreInstanceState:

Most implementations will simply use onCreate(Bundle) to restore their state, but it is sometimes convenient to do it here after all of the initialization has been done or to allow subclasses to decide whether to use your default implementation.

So for best practice, lay out your view hierarchy in onCreate and restore the previous state in onRestoreInstanceState. If you do that, anyone who subclasses your Activity can chose to override your onRestoreInstanceState to augment or replace your restore state logic. This is a long way of saying onRestoreInstanceState serves as a template method.

大致意思就是:

  onRestoreInstanceState 说白了很费官方说法就是为了子类继承方便调用。
 
 初始化操作在oncreate, 恢复数据在onRestoreInstanceState (参考上述生命周期,大致意思应该是oncreate应该执行一些初始化相关操作,在启动和显示之间操作一些)。
 只是为了 子类继承的时候业务逻辑分开。但是要把onRestoreInstanceState 说成是模板方法,也是漫漫长路。



Android Activity生命周期与Intent机制详解 Activity是Android应用开发的核心组件,负责管理用户界面和交互逻辑。其生命周期包含onCreate()、onResume()等关键方法,开发者通过重写这些方法控制界面状态。Intent作为组件通信机制,支持显式和隐式两种启动方式,实现Activity间的数据传递。理解Activity启动模式(如singleTask)对管理任务栈至关重要。在性能优化方面,需注意内存泄漏预防和启动时间控制。这些技术广泛应用于电商、社交等需要复杂界面跳转的场景,是构建高质量Android应用的基础。 阅读详情

相关推荐

Android性能优化与Systrace工具实战指南

性能优化是Android开发中的核心课题,涉及UI渲染、内存管理和线程调度等关键技术。Systrace作为Android官方提供的系统级性能分析工具,能够可视化呈现应用与系统组件的交互细节,帮助开发者定位卡顿、过度绘制等典型性能问题。通过分析主线程阻塞、VSYNC信号间隔等关键指标,开发者可以快速识别性能瓶颈并实施优化。本文结合View触摸事件处理等实际开发场景,详细解析Systrace的命令行参数配置和报告分析方法,为移动应用流畅体验提供工程实践方案。

weixin_34203832的博客 324

Android onSaveInstanceState/onRestoreInstanceState 原来要这么理解

前言 前些天,有位小伙伴兴匆匆地跑过来给我展示一个现象:Activity 里有个EditText,点击该EditText 输入一些文字。此时,转动手机方向,Activity 变成横屏了,而EditText 上的文字依然保留。 问我:为啥EditText上文字能够恢复? 我说:你Activity 配置了横竖屏切换时不重建Activity。 他立马给我展示了:Activity 重建的日志。 我说:系统会在重建Activity 的时候恢复整个ViewTree吧。 他又给我展示了:ImageView 横竖屏时没有恢

4633

Activity之onCreate、onRestoreInstanceState恢复数据的区别

onCreate() 、onRestoreInstanceState()恢复数据的区别

菜鸟博客 1210

onRestoreInstanceState和onSaveInstanceState(Activity创建与恢复)

onSaveInstanceState()方法的作用: 给给Bundle对象中保存相应的 instance state (指的是key-value pairs),这样当activity重新创建的时候,就可以通过获取bundle中存储的值,恢复到自己之前的状态 onRestoreInstanceState()方法的作用 获取bundle中存储的instance state ,通过存储的值将ac...

liu_12345_liu的博客 1514

避坑指南:PyTorch ConvLSTM参数配置的那些坑(hidden_dim/kernel_size/num_layers详解)

本文深度解析PyTorch ConvLSTM中hidden_dim、kernel_size和num_layers三大核心参数的配置技巧,提供实战指南和性能优化建议。通过实验数据揭示参数组合的内在规律,帮助开发者避免常见配置陷阱,提升时空序列建模效果。特别针对视频预测、气象预报等应用场景,给出黄金参数组合方案和调试技巧。

vv45678的博客 705

KT148A语音芯片SOP外挂功放芯片8002D的说明_V1

KT148A语音芯片内置8欧姆0.5W的功放,所以一般的应用场景,播放一些提示音音量是足够的。但是有的需求还需要驱动更大的扬声器,实现更大的播放音量,这里我们给出解决方案。KT148A+HAA8002D的组合

qyvhome的博客 2152

onSaveInstanceState()和onRestoreInstanceState()使用详解

背景 如果系统由于系统约束(而不是正常的应用程序行为)而破坏了Activity,那么尽管实际 Activity实例已经消失,但是系统还是会记住它已经存在,这样如果用户导航回到它,系统会创建一个新的实例的Activity使用一组保存的数据来描述Activity在被销毁时的状态。系统用于恢复以前状态的已保存数据称为“实例状态”,是存储在Bundle对象中的键值对的集合。 解决 onSaveInstan...

weixin_34327761的博客 382

5G NR 帧结构

本节主要介绍5G NR中的帧结构[38.211-4.3]。5G帧结构(Frame Structure)为时域结构。其设计比其4G LTE更为灵活,这种灵活性使5G能够根据应用需求(如增强移动宽带eMBB,超高可靠低时延通信URLLC)进行调整,同时支持差异化的应用场景,提高了5G的利用效率与响应能力。具体而言,5G帧结构是基于时隙和OFDM符号设计的,且5G网络能够根据服务需求动态调整各时隙持续时长。

夫子喵的博客 5287

Android中onSaveInstanceState和onRestoreInstanceState详解

onRestoreInstanceState()被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行 此也说明上二者,大多数情况下不成对被使用。注意上面的双引号,何为"容易"?

m0_61499908的博客 1131

LLVM实战:如何用Clang+LLVM打造你的第一个C++编译器(附完整配置步骤)

本文详细介绍了如何使用Clang+LLVM构建C++编译器的完整配置步骤,从环境准备到编译流程剖析,再到调试与优化技巧。通过实战指南,帮助开发者深入理解LLVM编译器框架的工作原理,并掌握交叉编译与性能分析等高级功能。

sprite的博客 748

图解凸函数与凹函数:别再被数学定义搞晕了!

本文通过图解和生活化类比,深入浅出地解释了凸函数与凹函数的数学定义及其与日常直觉的差异。文章详细介绍了凸函数的图像特征、数学定义(包括二阶导数判断)、在机器学习中的重要性,以及常见误区和实际应用中的判断技巧,帮助读者彻底理解这一关键数学概念。

weixin_29159441的博客 661

Android源码分析 - onSaveInstanceState、onRestoreInstanceState 状态保存与恢复

本文基于 Android8.0 源码。

深海流浪汉 1254

yakit 验证码识别 进行webfuzzer

在渗透测试的过程中,我们可能需要对管理员密码进行枚举,或者密码喷洒的时候,遇到验证码就很烦。有没有自动化识别验证码的办法呢?有的,兄弟,有的。验证码的识别率很低,captcha-killer-modified对算术验证码识别正确率非常低,还会识别成乱七八糟的结果,这就非常麻烦。因为你不知道到底是验证码不对,还是密码不对。这是 ddddocr 识别率的问题,如果师傅们找到准确度更高的工具,完全可以替换上去。

Arkmornings的博客 1669

onCreate onRestoreInstanceState onSaveInstanceState

1. 在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanceState的作用。 2.在Activity里的onCreate(Bundle savedInstanceState)函数中,savedInstanceState这个参数是用来存储Ac

手指乐 3874

SAP 生产订单工序删除状态撤回简介

2、我们在前台对于生产订单的状态一个是在生产订单抬头中的状态,另外一个是针对上面一直在测试的是工序的状态,这个两个状态是前台可见的状态,实际生产订单还有一个组件物料的状态,这个状态是不可见的一个状态。生产订单中的0010工序中对应的组件的栏位被标识,表示有物料分配到了0010的工序中,正常情况下0010的工序被分配了工序是不应该被删除的。将已领料的工序删除掉,导致异常的发生。当物料已领料会,用户仍然把已分配的物料的工序删除掉,导致后续业务操作过程中产生异常,如下图中所示,0010的工序被打上了删除标识。

我小时候很黑的博客 1945

K230+canMV开发中常见的数据类型转换参考示例

【代码】K230+canMV开发中常见的数据类型转换参考示例。

weixin_47446386的博客 68

[Android][Activity] onCreate, onSaveInstanceState和onRestoreInstanceState的调用探讨

http://blog.youkuaiyun.com/leewind841209/article/details/6561874 [Target]       在Activity里的onCreate(Bundle savedInstanceState)函数中,savedInstanceState这个参数是用来存储Activity的信息,包括了每个UI的信息和用户自定义在其中存储的信息。这篇文章就目的就是...

幸福过饱和的专栏 204

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Activity界面数据恢复及onSaveInstanceState及onCreate带两个参数的跟一个参数的区别

  1、Activity界面数据恢复:分两种 第一种:当切换进程,过一段时间,再次进入,activity页面被杀死,进程没有结束,会重新绘制activity,原先输入的数据都不存在: @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState...

fayangzhou的博客 1600

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

每日一学——创建的Android项目、页面空白、闪退,不显示页面内容

很小白的问题,但是还是记录一下吧。顺便分析一下: 大家都知道Activity的onCreate方法有两个重写,如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void

Lemon_wzq的博客 543

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android横竖屏切换数据保存的方法以及onSaveInstanceState() 的实现

介绍:横屏切换竖屏实际上是先把当前的横屏的Activity杀掉 然后重新创建一个竖屏的Activity,我们可以使用onSaveInstanceState()方法保存数据,它是在横屏Activity将杀死前调用,可以将须要保存的数据放入Bundle封装在系统中,切换竖屏后这个Activity又重新被创建 这样可以在onCreate(Bundle)或者onRestoreInstanceState(B

MarkBlue的博客 7515

系统配置发生变更时 activity状态保持

系统配置发生变更时,系统会 (重启 activity 对象 ) 1、销毁原来的activity对象 2、重新创建 activity对象,初始化布局参数 1、限定屏幕方向 通常最容易遇到的系统配置发生变更,就是屏幕方向发生变化,可以通过限定屏幕方向来解决activity重启 在activity标签中添加screenOrientation属性 android:screenOrie...

墨轩 567

Android RecyclerView核心原理与最佳实践指南

RecyclerView作为Android开发中的核心UI组件,通过视图回收机制显著提升了列表性能。其核心架构基于LayoutManager、Adapter和ViewHolder三大部分,实现了数据与视图的高效分离。在移动应用开发中,RecyclerView相比传统ListView具有更优的内存管理和渲染效率,特别适合处理动态内容和大型数据集。通过合理使用视图回收池和差分刷新技术,开发者可以构建流畅的列表界面。典型应用场景包括社交动态流、商品列表和消息对话等需要高性能滚动的界面。掌握RecyclerView

weixin_34355559的博客 497

【Jetpack 内核实战 02】ViewModel:生命周期管理与数据持久化核心实战

本文从源码视角深度拆解 ViewModel 核心机制,覆盖生命周期原理、ViewModelStore 底层实现、带参 Factory 封装、Fragment 间数据共享、AndroidViewModel 选型等核心内容,全程地道 Kotlin 写法,配套记事本项目预集成代码与高频避坑指南。

Jm0218Xx的博客 546

Handler消息机制与Activity生命周期:从小米笔试真题看内存泄漏与进程优先级

在Android开发中,Handler消息机制与Activity生命周期是两大核心基础,也是面试中高频考察的知识点。理解它们的运行原理,不仅能帮助我们解析系统消息队列的工作方式,更能从根源上认识内存泄漏的产生路径。当Activity在后台被系统回收时,进程优先级的变化会直接影响延迟消息的执行结果,这也是许多线上Bug的隐蔽诱因。借助LeakCanary等工具,我们可以直观地观察Activity实例是否被Handler间接持有而无法释放。从消息发送到生命周期回调,从进程回收机制到工程修复方案,本文围绕一道经典

weixin_30580341的博客 320

Android面试进阶:从生命周期到架构设计,掌握核心原理与工程实践

在Android开发领域,理解核心组件原理与系统机制是构建稳定、高性能应用的基础。Activity、Fragment等组件的生命周期管理,不仅是面试高频考点,更是处理页面状态、数据恢复与内存管理的工程实践核心。其背后涉及系统对应用进程与任务栈的调度原理,深刻理解这些机制,能有效避免内存泄漏与状态不一致问题,提升应用健壮性。随着Jetpack架构组件的普及,ViewModel、LiveData等现代技术方案,为数据驱动UI和生命周期感知编程提供了标准化支持,推动了MVVM等架构模式在工程中的落地。这些技术价值

weixin_33713350的博客 476

Android开发环境搭建与核心组件详解

Android开发环境搭建是移动应用开发的基础,其中Android Studio作为官方IDE集成了代码编辑、调试和性能分析工具。ADB(Android Debug Bridge)则是连接开发机与设备的桥梁,通过环境变量配置可实现高效调试。在组件层面,Activity生命周期管理涉及onCreate到onDestroy的完整流程,而Service组件则需要适配Android 8.0后的后台限制。UI开发中,Lottie动画库和动态图标技术能显著提升用户体验,MVVM架构配合Jetpack组件可构建响应式应用

weixin_33766168的博客 385
上一篇: Android Studio鼠标移到类或者方法上面显示方法注释doc
下一篇: 使用Android Support Annotations优化代码
androideveloper
博客等级 码龄12年 21粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值