详解 Android 的 Activity 组件

Activity详解与实现,Android工程师面试题 这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。上述高清技术脑图以及配套的架构技术PDF可以点击我的GitHub免费获取当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。 阅读详情


Activity 的生命周期

和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理。与 MIDlet 不同的是安装在 android 中的所有的 Activity 都是平等的。

Activity 的状态及状态间的转换

在 android 中,Activity 拥有四种基本状态:

  1. Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
  2. Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
  3. Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
  4. Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。

当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。下图说明了 Activity 在不同状态间转换的时机和条件:

图 1. Activity 的状态转换
图 1. Activity 的状态转换

如上所示,Android 程序员可以决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序员可以启动一个 Activity,但是却不能手动的“结束”一个 Activity。当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完成了相应的工作,可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,同时原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。例如:从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们调用 Activity2.finish()方法时,Activity Manager 重新激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被执行,Activity2 返回的数据通过 data参数返回给 Activity1。

Activity 栈

Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:

图 2. Activity 的状态与它在栈中的位置关系
图 2. Activity 的状态与它在栈中的位置关系

如上所示,除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。

Activity 生命周期

在 android.app.Activity类中,Android 定义了一系列与生命周期相关的方法,在我们自己的 Activity 中,只是根据需要复写需要的方法,Java 的多态性会保证我们自己的方法被虚拟机调用,这一点与 J2ME 中的 MIDlet 类似。

 public class OurActivity extends Activity { 
    protected void onCreate(Bundle savedInstanceState); 
    protected void onStart(); 
    protected void onResume(); 
    protected void onPause(); 
    protected void onStop(); 
    protected void onDestroy(); 
 }

这些方法的说明如下:

  1. protected void onCreate(Bundle savedInstanceState)一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。例如:
 setContentView(R.layout.main);

当然,也可从 savedInstanceState中读我们保存到存储设备中的数据,但是需要判断 savedInstanceState是否为 null,因为 Activity 第一次启动时并没有数据被存贮在设备中:

 if(savedInstanceState!=null){ 
 savedInstanceState.get("Key"); 
 }
  1. protected void onStart()该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。
  2. protected void onResume()在 Activity 从 Pause 状态转换到 Active 状态时被调用。
  3. protected void onResume()在 Activity 从 Active 状态转换到 Pause 状态时被调用。
  4. protected void onStop()在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。
  5. protected void onDestroy()在 Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。
图 3. 这些方法的调用时机
图 3. 这些方法的调用时机

此外,Android 还定义了一些不常用的与生命周期相关的方法可用:

 protected void onPostCreate(Bundle savedInstanceState); 
 protected void onRestart(); 
 protected void onPostResume();

Android 提供的文档详细的说明了它们的调用规则。


创建一个 Activity

在 android 中创建一个 Activity 是很简单的事情,编写一个继承自 android.app.Activity的 Java 类并在 AndroidManifest.xml声明即可。下面是一个为了研究 Activity 生命周期的一个 Activity 实例(工程源码见下载):

Activity 文件:

 public class EX01 extends Activity { 
    private static final String LOG_TAG = EX01.class.getSimpleName(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main); 
        Log.e(LOG_TAG, "onCreate"); 
    } 
   @Override 
    protected void onStart() { 
        Log.e(LOG_TAG, "onStart"); 
        super.onStart(); 
    } 
    @Override 
    protected void onResume() { 
        Log.e(LOG_TAG, "onResume"); 
        super.onResume(); 
    } 
    @Override 
    protected void onPause() { 
        Log.e(LOG_TAG, "onPause"); 
        super.onPause(); 
    } 
    @Override 
    protected void onStop() { 
        Log.e(LOG_TAG, "onStop"); 
        super.onStop(); 
    } 
    @Override 
    protected void onDestroy() { 
        Log.e(LOG_TAG, "onDestroy "); 
        super.onDestroy(); 
    } 
 }

AndroidManifest.xml 中通过 <activity> 节点说明 Activity,将 apk 文件安装后,系统根据这里的说明来查找读取 Activity,本例中的说明如下:

 <activity android:name=".EX01" android:label="@string/app_name"> 
	 <intent-filter> 
		 <action android:name="android.intent.action.MAIN" /> 
		 <category android:name="android.intent.category.LAUNCHER" /> 
	 </intent-filter> 
 </activity>

启动另外一个 Activity

Activity.startActivity()方法可以根据传入的参数启动另外一个 Activity:

 Intent intent =new Intent(CurrentActivity.this,OtherActivity.class); 
 startActivity(intent);

当然,OtherActivity同样需要在 AndroidManifest.xml 中定义。


Activity 之间通信

使用 Intent 通信

在 Android 中,不同的 Activity 实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在 Activity 之间传递消息。Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。

在上面的实例中通过 Activity. startActivity(intent)启动另外一个 Activity 的时候,我们在 Intent 类的构造器中指定了“收件人地址”。

如果我们想要给“收件人”Activity 说点什么的话,那么可以通过下面这封“e-mail”来将我们消息传递出去:

 Intent intent =new Intent(CurrentActivity.this,OtherActivity.class);
  // 创建一个带“收件人地址”的 email 
 Bundle bundle =new Bundle();// 创建 email 内容
 bundle.putBoolean("boolean_key", true);// 编写内容
 bundle.putString("string_key", "string_value"); 
 intent.putExtra("key", bundle);// 封装 email 
 startActivity(intent);// 启动新的 Activity

那么“收件人”该如何收信呢?在 OtherActivity类的 onCreate()或者其它任何地方使用下面的代码就可以打开这封“e-mail”阅读其中的信息:

 Intent intent =getIntent();// 收取 email 
 Bundle bundle =intent.getBundleExtra("key");// 打开 email 
 bundle.getBoolean("boolean_key");// 读取内容
 bundle.getString("string_key");

上面我们通过 bundle对象来传递信息,bundle维护了一个 HashMap<String, Object>对象,将我们的数据存贮在这个 HashMap 中来进行传递。但是像上面这样的代码稍显复杂,因为 Intent 内部为我们准备好了一个 bundle,所以我们也可以使用这种更为简便的方法:

 Intent intent =new Intent(EX06.this,OtherActivity.class); 
 intent.putExtra("boolean_key", true); 
 intent.putExtra("string_key", "string_value"); 
 startActivity(intent);

接收:

 Intent intent=getIntent(); 
 intent.getBooleanExtra("boolean_key",false); 
 intent.getStringExtra("string_key");

使用 SharedPreferences

SharedPreferences 使用 xml 格式为 Android 应用提供一种永久的数据存贮方式。对于一个 Android 应用,它存贮在文件系统的 /data/ data/your_app_package_name/shared_prefs/目录下,可以被处在同一个应用中的所有 Activity 访问。Android 提供了相关的 API 来处理这些数据而不需要程序员直接操作这些文件或者考虑数据同步问题。

 // 写入 SharedPreferences 
 SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE); 
 Editor editor = preferences.edit(); 
 editor.putBoolean("boolean_key", true); 
 editor.putString("string_key", "string_value"); 
 editor.commit(); 
        
 // 读取 SharedPreferences 
 SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE); 
 preferences.getBoolean("boolean_key", false); 
 preferences.getString("string_key", "default_value");

其它方式

Android 提供了包括 SharedPreferences 在内的很多种数据存贮方式,比如 SQLite,文件等,程序员可以通过这些 API 实现 Activity 之间的数据交换。如果必要,我们还可以使用 IPC 方式。


Activity 的 Intent Filter

Intent Filter 描述了一个组件愿意接收什么样的 Intent 对象,Android 将其抽象为 android.content.IntentFilter 类。在 Android 的 AndroidManifest.xml 配置文件中可以通过 <intent-filter >节点为一个 Activity 指定其 Intent Filter,以便告诉系统该 Activity 可以响应什么类型的 Intent。

当程序员使用 startActivity(intent) 来启动另外一个 Activity 时,如果直接指定 intent 了对象的 Component 属性,那么 Activity Manager 将试图启动其 Component 属性指定的 Activity。否则 Android 将通过 Intent 的其它属性从安装在系统中的所有 Activity 中查找与之最匹配的一个启动,如果没有找到合适的 Activity,应用程序会得到一个系统抛出的异常。这个匹配的过程如下:

图 4. Activity 种 Intent Filter 的匹配过程
图 4. Activity 种 Intent Filter 的匹配过程

Action 匹配

Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 <intent-filter >节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:

 <intent-filter > 
 <action android:name="android.intent.action.MAIN" /> 
 <action android:name="com.zy.myaction" /> 
……
 </intent-filter>

如果我们在启动一个 Activity 时使用这样的 Intent 对象:

 Intent intent =new Intent(); 
 intent.setAction("com.zy.myaction");

那么所有的 Action 列表中包含了“com.zy.myaction”的 Activity 都将会匹配成功。

Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。

URI 数据匹配

一个 Intent 可以通过 URI 携带外部数据给目标组件。在 <intent-filter >节点中,通过 <data/>节点匹配外部数据。

mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:

 <data android:mimeType="mimeType" android:scheme="scheme" 
 android:host="host" android:port="port" android:path="path"/>

如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。

Category 类别匹配

<intent-filter >节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。


一些关于 Activity 的技巧

锁定 Activity 运行时的屏幕方向

Android 内置了方向感应器的支持。在 G1 中,Android 会根据 G1 所处的方向自动在竖屏和横屏间切换。但是有时我们的应用程序仅能在横屏 / 竖屏时运行,比如某些游戏,此时我们需要锁定该 Activity 运行时的屏幕方向,<activity >节点的 android:screenOrientation属性可以完成该项任务,示例代码如下:

 <activity android:name=".EX01"
 android:label="@string/app_name" 
 android:screenOrientation="portrait">// 竖屏 , 值为 landscape 时为横屏
…………
 </activity>

全屏的 Activity

要使一个 Activity 全屏运行,可以在其 onCreate()方法中添加如下代码实现:

 // 设置全屏模式
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
 // 去除标题栏
 requestWindowFeature(Window.FEATURE_NO_TITLE);

在 Activity 的 Title 中加入进度条

为了更友好的用户体验,在处理一些需要花费较长时间的任务时可以使用一个进度条来提示用户“不要着急,我们正在努力的完成你交给的任务”。如下图:

在 Activity 的标题栏中显示进度条不失为一个好办法,下面是实现代码:

 // 不明确进度条
 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
 setContentView(R.layout.main); 
 setProgressBarIndeterminateVisibility(true); 

 // 明确进度条
 requestWindowFeature(Window.FEATURE_PROGRESS); 
 setContentView(R.layout.main); 
 setProgress(5000);

下载

描述名字大小
样例代码EX01.zip21KB

参考资料

条评论

10.1Activity生命周期 Android生命周期 首先我们来看下这张图片,当程序开始运行时,会执行 onCreate(),onStrat(),onResume().这三个方法。 onCreate() 您必须实现此回调,其在系统首次创建 Activity 时触发。Activity 会在创建后进入已创建状态。在 onCreate() 方法中,您需执行基本应用启动逻辑,该逻辑在 Activity 的整个生命周期中只应发生一次。 onStart() 当 Activity 进入“已开始”状态时,系统会调用此回调。onStart() 调用使 阅读详情

相关推荐

Android四大组件—Activity详解

一、Activity介绍 Activity是Android的四大组件之一,它提供屏幕,用户通过它与机器产生交互。 二、Activity的生命周期 onresume 与 onstart 的区别 onStart 用户可见,但还没有获得焦点,用户还不能进行操作。 onResume 界面可见,并获得焦点,用户可以进行操作了。 Activity A 启动 Activity B 时的操作打印 Activity_A onPause()...... Activity_B onCreate()........

shipingxue的专栏 629

Android 之 Activity 详解

最近在学习Android开发方面的知识,整理了一下关于Android中Activity方面的知识,也算是对自己学的知识进行了总结。Activity 在 Android开发中有着极其重要的位置,Activity是Android中四大组件之一,而我们的Android应用是由一个或多个Activity组成的。本篇文章将从以下几个方面给大家分享Activity的知识: 文章目录1. Activity 的概念1.1 Activity 的概念1.2 创建 Activity2. Activity 的启动方法2.1 显示启

小曾同学的博客 18万+

Android四大组件:Activity详解(一)基础概念与生命周期

Activity是Android应用程序的核心组件之一,它提供了一个用户界面,让用户可以与应用程序进行交互。从用户体验的角度来看,Activity就像是应用程序的"窗口"或"页面"。一个Android应用通常由多个Activity组成,它们之间可以相互跳转,共同构成了应用的用户界面流程。Activity的生命周期是指从创建到销毁的整个过程,Android系统通过一系列回调方法来管理Activity的生命周期。了解这些生命周期方法对于开发高质量的Android应用至关重要。onCreate()

Ya-Jun 的博客 1021

Android基础——Activity

Android基础一级目录二级目录三级目录 一级目录 二级目录 三级目录

松仔Log的博客 3万+

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2560

openvpn 安装 (Alibaba Cloud Linux release 3 (Soaring Falcon))

1.错误:configure: error: libnl-genl-3.0 package not found or too old. Is the development package and pkg-config (/usr/bin/pkg-config) installed?# ta.key在/etc/openvpn/server/目录下可以如下配置,否则需要写完整路径。# 配置账号密码登录客户端需要ca证书(可选)# 证书校验算法 配置上面生成的完整路径。# ca证书 配置上面生成的完整路径。

dubhe_zhao的博客 2153

【Android】安卓四大组件之活动(Activity) 详解:从基础到进阶

在安卓应用开发的世界里,Activity 作为安卓四大组件之一,是用户与应用进行交互的重要窗口,它承载着应用的界面展示与用户操作响应功能。无论是打开一款 APP 看到的主界面,还是点击按钮后弹出的新页面,都是 Activity 在发挥作用。本文将深入剖析 Activity,带你全面了解它的原理、使用方法及进阶技巧

m0_59734531的博客 3873

12V电源电路五层防护设计实战指南

12V电源电路是工业控制、车载电子和智能终端中最基础的供电架构,其可靠性不取决于稳压精度,而取决于对反接、浪涌、短路、过温等典型故障的响应能力。理解TVS钳位原理、P-MOSFET防反接机制及eFuse可编程限流逻辑,是构建鲁棒电源系统的核心。技术价值在于将保护从‘事后补救’升级为‘事前拦截’,显著提升产品MTBF并降低售后返修率。典型应用场景涵盖PLC辅助电源、ADAS摄像头供电、IoT网关主板等严苛环境设备。本文聚焦12V输入端到负载输出端的五层串行防护链设计,深度融合TVS选型、MOSFET导通阈值与

weixin_30983965的博客 297

Android中Activity组件详解

Android中Activity组件详解 分类: Android2011-06-08 22:48 2183人阅读 评论(1) 收藏 举报 androidactionstringmanagerschemefilter 1.Activity 的生命周期 和J2ME的MIDlet一样,在Android中,Activity的生命周期交给系统统一管理。与MIDlet不同的是安装在

qiujiwuhen00的博客 360

数据资产入表——解读100页数据资产入表解读与分析【附全文阅读】

本文档《数据资产入表:解读与分析》面向企业财务、数据管理、法务合规及高管等核心岗位,系统解析数据资产入表全流程。以"政策-实操-价值"为主线,首先解读入表政策要求,明确会计处理规范;其次详细拆解数据盘点、治理、确权、评估等实操步骤,提供行业案例参考;最后分析入表难点及后续运营策略,为企业提供从政策理解到落地执行的一站式解决方案。

cdfunlove的博客 392

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程

Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 474

Android 四大组件之Activity详解

对Android的activity的一个系统性的归纳整理,里面详细介绍了activity的创建、生命周期、启动方式、基本状态、启动模式、常见的一些问题等。

li847250110的博客 5万+

EXCEL VBA从入门到精通 第一章:VBA入门

在VBA中,需要使用关键字Dim来定义一个变量,后面跟上变量名和变量的数据类型。例如,下面的代码定义了一个整型变量x和一个字符串变量name在VBA中,使用关键字Const来定义常量,后面跟上常量名和常量的值。例如,下面的代码定义了一个整型常量MAX_NUM和一个字符串常量MESSAGE需要注意的是,常量一旦被定义,其值就不能被改变。

1万+

[java] 详解 Android 的 Activity 组件

详解 Android 的 Activity 组件 http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/index.html Activity 的生命周期 和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理。与 MIDlet 不同的是安装在

拒绝黑盒,享受开源 958

智能车图像处理3-入门级分析2 ---直道冲刺

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 4321

多物理场光学仿真软件:Lumerical_(15).多物理场耦合仿真案例分析

在多物理场光学仿真中,Lumerical 软件提供了强大的工具来模拟复杂的光学系统,包括光子学、热学、力学和电学等多物理场的耦合。本节将通过具体的案例分析,展示如何在 Lumerical 中进行多物理场耦合仿真的开发和实现。我们将从简单的热光效应仿真入手,逐步深入到更复杂的多物理场耦合场景,如光电效应和光力学效应。每个案例都将包括详细的原理说明和具体的代码示例,帮助读者更好地理解和应用这些技术。

kkchenjj的博客 1023

Android四大组件之Activity入门详解

Activity是Android的四大组件之一,同时它也是Android应用中最常见的组件之一。一个应用通常会有多个Activity,它主要负责与用户进行交互,并向用户呈现出应用此时的状态,不同的Activiy呈现给用户不同的操作体验。其实每当我们打开一个Android的app,我们都会接触到它。

qq_51491127的博客 2115

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android组件系列----Activity组件详解

Android组件系列----Activity组件详解 原始出处 文章来源:http://www.cnblogs.com/smyhvae/p/3924567.html   【正文】 注:四大组件指的是应用组件:Activity、Service、BroadcastReceiver、ContentProvider;之前的控件指的是UI组件。 博文目录: 一、Activ

HITcoke的博客 924

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android四大组件之Activity详解

生命周期 Activty的生命周期的也就是它所在进程的生命周期。   一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启动时: 第一个Activity onPause()——>第二个Activity    onCreate()——>onStart()——>onR

l55iuming的专栏 451

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: AsyncTask与Thread+Handler的区别、AsyncTask的使用
下一篇: 关于xmlns:tools使用说明
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值