Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

Android横竖屏幕切换生命周期详解 主要为大家详细介绍了Android横竖屏幕切换生命周期,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载

Fragment生命周期图解,fragment和activity生命周期对比

生命周期变化 : 切换到该Fragment

05-21 14:26:35.095: D/FragmentDemo(7649): onAttach
 05-21 14:26:35.095: D/FragmentDemo(7649): onCreate
 05-21 14:26:35.095: D/FragmentDemo(7649): onCreateView
 05-21 14:26:35.100: D/FragmentDemo(7649): onActivityCreated
 05-21 14:26:35.120: D/FragmentDemo(7649): onStart
 05-21 14:26:35.120: D/FragmentDemo(7649): onResume

屏幕灭掉:

05-21 14:27:35.185: D/FragmentDemo(7649): onPause
 05-21 14:27:35.205: D/FragmentDemo(7649): onSaveInstanceState
 05-21 14:27:35.205: D/FragmentDemo(7649): onStop

屏幕解锁

05-21 14:33:13.240: D/FragmentDemo(7649): onStart
 05-21 14:33:13.275: D/FragmentDemo(7649): onResume

切换到其他Fragment:

05-21 14:33:33.655: D/FragmentDemo(7649): onPause
 05-21 14:33:33.655: D/FragmentDemo(7649): onStop
 05-21 14:33:33.660: D/FragmentDemo(7649): onDestroyView

切换回本身的Fragment:

05-21 14:33:55.820: D/FragmentDemo(7649): onCreateView
 05-21 14:33:55.825: D/FragmentDemo(7649): onActivityCreated
 05-21 14:33:55.825: D/FragmentDemo(7649): onStart
 05-21 14:33:55.825: D/FragmentDemo(7649): onResume

回到桌面

05-21 14:34:26.590: D/FragmentDemo(7649): onPause
 05-21 14:34:26.880: D/FragmentDemo(7649): onSaveInstanceState
 05-21 14:34:26.880: D/FragmentDemo(7649): onStop

回到应用

05-21 14:36:51.940: D/FragmentDemo(7649): onStart
 05-21 14:36:51.940: D/FragmentDemo(7649): onResume

退出应用

05-21 14:37:03.020: D/FragmentDemo(7649): onPause
 05-21 14:37:03.155: D/FragmentDemo(7649): onStop
 05-21 14:37:03.155: D/FragmentDemo(7649): onDestroyView
 05-21 14:37:03.165: D/FragmentDemo(7649): onDestroy
05-21 14:37:03.165: D/FragmentDemo(7649): onDetach

新建一个Activity,在各个生命周期中输出log

1、按crtl+f12切换成横屏时

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

2、再按crtl+f12切换成竖屏时,发现打印了两次相同的log

 onSaveInstanceState-->
 onPause-->
 onStop-->
 onDestroy-->
 onCreate-->
 onStart-->
 onRestoreInstanceState-->
 onResume-->
 onSaveInstanceState-->
 onPause-->
 onStop-->
 onDestroy-->
 onCreate-->
 onStart-->
 onRestoreInstanceState-->
 onResume-->

3、修改AndroidManifest.xml,把该Activity添加 Android:configChanges=”orientation”,执行步骤2,横屏切换为竖屏

 onSaveInstanceState-->
 onPause-->
 onStop-->
 onDestroy-->
 onCreate-->
 onStart-->
 onRestoreInstanceState-->
 onResume-->

4、再执行步骤2,竖屏切换为横屏,发现不会再打印相同信息,但多打印了一行onConfigChanged

 onSaveInstanceState-->
 onPause-->
 onStop-->
 onDestroy-->
 onCreate-->
 onStart-->
 onRestoreInstanceState-->
 onResume-->
 onConfigurationChanged-->

5、把步骤3的android:configChanges=”orientation” 改成 android:configChanges=”orientation|keyboardHidden”,执行步骤2,竖屏切换横屏,就只打印onConfigChanged

 onConfigurationChanged-->

8、再次执行步骤2,横屏切换回竖屏

 onConfigurationChanged-->

总结:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

转载请注明:Android开发中文站 » Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

华为OD技术面八股_C++_05 汇总华为OD技术面C++方向技术面八股文,提供详细解答。 阅读详情

相关推荐

头歌 DNS协议分析第3关----DNS 报文分析

DNS 报文分析

qq_67667368的博客 4348

Activity、Fragment生命周期---横竖屏切换的生命周期

先贴出一张大家众所周知activity流程图 onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。onStart():Activity在屏幕上对用户可见时调用,但还不可与用户交互  onRestart():在activity停止后,在再次启动之前被调用。 onResume():Activity开始和用户交互

全干工程师 5525

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1211

Activity Fragment生命周期--页面切换

Fragment与Fragment相互切换之间的生命周期方法 Activity横竖屏切换生命周期 也可以参考这篇文章 首先,写一写关于Fragment生命周期的相关。先放上一张老图!! Fragment 1 切换到 Fragment 2时生命周期变化 1、通过 add hide show 方式来切换 Fragment Fragment 2再切换到 Fragment ...

cmyperson的博客 578

LPDDR5时序精调:深入解析Read Gate Training的两种模式

本文深入解析了LPDDR5内存中关键的Read Gate Training技术,详细对比了RDQS Toggle Mode(翻转模式)与Enhanced RDQS Mode(增强模式)的工作原理、时序参数及适用场景。文章阐述了在高速数据传输下精准校准时序的必要性,并提供了两种模式的实战选型指南与系统级调试思路,帮助工程师优化内存性能与稳定性。

weixin_29219189的博客 369

为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?

DRAM的ECC,目前的编码方式都是128bit data,产生8bit parity或者ECC code. 而且必须要128bit才行。这8bit的ECC code是要被写入到DRAM内存里面的,从而read的时候,可以读取这8bit ECC code来判定read data是否有错,如果是SBF,就可以纠错了,如果是double bit,大部分时候是可以detect到错误,即所谓的SEC(Single Error Correct) + DED(Double Error Detect).

一个DRAM从业者的告白 1557

Activity、Fragment生命周期以及横竖屏切换的生命周期

        Fragment是在Android 3.0 (API level 11)开始引入的,它能让你的app在现有基础上性能大幅度提高,并且占用内存降低,同样的界面Activity占用内存比Fragment要多,响应速度Fragment比Activty在中低端手机上快了很多,甚至能达到好几倍,"单Activity + 多Fragment架构"和"多模块Activity + 多Fragmen...

Run_Forrest_Run的博客 1410

深入解析LCD DRM驱动框架中的KMS与GEM机制

本文深入解析了Linux内核中DRM(Direct Rendering Manager)驱动框架的核心机制,重点剖析了KMS(内核模式设置)与GEM(图形执行管理器)的工作原理。KMS作为显示系统的总指挥,负责原子化地控制CRTC、Encoder、Plane等硬件资源,确保画面同步更新,避免撕裂;GEM则作为显存大管家,通过DUMB和PRIME机制高效管理图形缓冲区的分配、共享与同步。文章结合RK3568平台实战,阐述了如何利用这些机制优化显示性能,并提供了调试技巧与常见问题解决方案。

weixin_29188997的博客 388

Activit、Fragment的生命周期 及横竖屏切换的一些问题 及解决方案

Activity 的生命周期: 1.onCreate():表示Activity 正在被创建 第一个方法 加载一些界面布局文件,初始化Activity 2.onRestart(): 重新启动 3.onStart():当前Activity 正在启动 即将开始 已经可见了。还没有出现在前台还无法与用户进行交互 4.onResume(): 表示已经可见了。已经可以和用户进行交互了 5.onPause()...

-阿 呆的博客 1163

9.6华为OD机试真题 新系统【仓储货物有序出库】

华为OD机试真题 新系统【仓储货物有序出库】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【仓储货物有序出库】多语言题解。

qq_45776114的博客 893

使用R语言读取和处理CSV数据集

查看数据集的结构str(data)# 查看数据集的摘要统计信息str()函数将显示数据集的结构信息,包括变量名称、类型和前几行的值。summary()函数将提供数据集的摘要统计信息,如均值、中位数、最小值、最大值等。

CyberGenius的博客 3856

android activity 生命周期demo,Fragment和Activity生命周期以及横竖屏切换对生命周期的影响...

Fragment生命周期图解,fragment和activity生命周期对比生命周期变化 : 切换到该Fragment05-21 14:26:35.095: D/FragmentDemo(7649): onAttach05-21 14:26:35.095: D/FragmentDemo(7649): onCreate05-21 14:26:35.095: D/FragmentDemo(7649):...

weixin_29294395的博客 184

Xiaojie雷达之路---手把手教你从串口获取雷达原始数据(一)---新建工程(开始)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章---利用串口获取毫米波雷达中的原始数据,本系列文章将从新建工程到最后原始数据显示到PC上进行逐步介绍,这个系列的文章大约是一个4-5篇左右。本篇文章呢,主要讲的是如何新建一个毫米波雷达的工程。

XiaoJie的博客 5810

Android 横竖屏切换及相关问题

本文主要讨论三个问题 横竖屏切换触发哪些生命周期? Activity销毁时怎么保留数据? 如何保证横竖屏切换时不销毁Activity android:screenOrientation screenOrientation设置 activity在设备上的显示方向的,设置值唯一 值 描述 unspecified 默认值。系统自动选择屏幕方向 behind 跟activity堆栈中的下面一个activity的方向一致 landscape 横屏方向,显示的宽比高长 portrai

临木的博客 442

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

深度学习工具包 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")

阿里Andorid研发一面:小姑娘挺不错来给我先讲讲Fragment和Activity相关吧

之前在github上更新了些关于面试类的文章,含有从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记 https://github.com/xiangjiana/androids 好久没更新了,公司电脑太卡了o(╥﹏╥)o。...

Android_SE的博客 475

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

activity / fragment 生命周期

参考:安卓基础:Activity/Fragment 生命周期

火星男孩的分享空间 337

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android 横竖屏切换

Android开发中,大多APP可能根据实际情况直接将APP的界面方向设死了,或竖屏或横屏。但是,我们还是会遇到横竖屏切换的功能需求,不管是通过物理重力感应触发,还是用户手动触发。所以,我们有必要去弄清楚Android中横竖屏切换到底做了什么。Follow me ……一、android:screenOrientation & android:configChangesandroid:screenOr

ZengTao 1014

关于Activity和Fragment生命周期详细解析

一:关于Activity的生命周期 onCreate() 表示Activity正在被创建 onRestart() 表示Activity正在被重新启动 onStart() 表示Activity正在被启动 即将开始 但是已经可见 但是还没出现在前台 onResume() 表示Activity已经可见 并且出现在前台开始活动 onPause() 表示Activity正在停止 正常情况下 紧接着...

Libertied的博客 851

Android题集四大组件之Activity

当Activity被重建后,系统会调用onRestoreInstanceState,并且把onSave(简称)方法所保存的Bundle对象同时传参给onRestore(简称)和onCreate(),因此可以通过这两个方法判断Activity是否被重建,调用在onStart之后;如果需要启动的实例是之前有打开过的,并且在栈的顶部,目前处于onPause、onStop 的状态,其他实例再次进入的话,执行顺序为:onNewIntent,onRestart,onStart,onResume。

2401_89285797的博客 946

Android Activity 横竖屏切换的生命周期

实现自定义的Configuration变化处理逻辑结合WindowManager计算实际可用尺寸。

斗锋在干嘛的博客 582

android 横竖屏幕切换

Android开发中,大多APP可能根据实际情况直接将APP的界面方向设死了,或竖屏或横屏。但是,我们还是会遇到横竖屏切换的功能需求,不管是通过物理重力感应触发,还是用户手动触发。所以,我们有必要去弄清楚Android中横竖屏切换到底做了什么。 Follow me ...... 一、android:screenOrientation & android:configChanges and

谢文浩博客 5286

android翻盘效果,行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案...

码个蛋(codeegg) 第 905 次推文作者:夜猫少年链接:https://juejin.im/post/5c8211fee51d453a136e36b0Activity篇1、说下Activity生命周期 ?参考解答:在正常情况下,Activity的常用生命周期就只有如下7个onCreate():表示Activity正在被创建,常用来初始化工作,比如调用setContentView加载界面布局...

weixin_42361796的博客 193

2021Android高级进阶学习资料,内含福利

Activity基础相关 说下Activity生命周期 ? Activity A 启动另一个Activity B 会调用哪些方法?如果B是透明主题的又或则是个DialogActivity呢 ? 说下onSaveInstanceState()方法的作用 ? 何时会被调用? 说下 Activity的四种启动模式、应用场景 ? 了解哪些Activity常用的标记位Flags? 说下 Activity跟window,view之间的关系? 横竖屏切换的Activity生命周期变化? 如何启动其他应用的Activit

碧海朝天素 162
上一篇: AndroidManifest.xml官方介绍
下一篇: Android工程师面试题大全
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值