android基本知识

一..android的系统架构:


Linux内核层:

Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、BinderIPC)驱动、电源管理等。

系统运行库层:

系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。

应用程序框架层

应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。这一层主要提供了构建应用程序时可能用到的各种 API, Android 自带的一些核心应用就是使用这些 API 完成的,开发者也可以通过使用这些 API 来构建自己的应用程序。

应用层
所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从 Google Play 上下载的小游戏,当然还包括你自己开发的程序。该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等

二.四大组件:

Android 系统四大组件分别是活动(Activity) 、服务(Service) 、广播接收器(Broadcast Receiver) 和内容提供器 (Content Provider) 。 其中活动是所有 Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。 广播接收器可以允许你的应用接收来自各处的广播消息, 比如电话、短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。

三:目录结构:

1.  src
毫无疑问, src目录是放置我们所有 Java代码的地方, 它在这里的含义和普通 Java项 目 下 的 src 目 录 是 完 全 一 样 的 , 展 开 之 后 你 将 看 到 我 们 刚 才 创 建 的HelloWorldActivity 文件就在里面。
2.  gen
这个目录里的内容都是自动生成的,主要有一个 R.java 文件,你在项目中添加的任何资源都会在其中生成一个相应的资源 id。这个文件永远不要手动去修改它。
3.  assets
这个目录用得不多,主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了 WebView 加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。
4.  bin
这个目录你也不需要过多关注,它主要包含了一些在编译时自动产生的文件。其中会有一个你当前项目编译好的安装包,展开 bin 目录你会看到 HelloWorld.apk,把这个文件拷到手机上就可以直接安装了。
5.  libs
如果你的项目中使用到了第三方 Jar 包,就需要把这些 Jar 包都放在 libs 目录下,放在这个目录下的 Jar 包都会被自动添加到构建路径里去。 你可以展开上图中 Android4.0、Android Private Libraries、Android Dependencies 这些库,其中显示的 Jar包都是已经被添加到构建路径里的。
6.  res
这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的 R.java 中的内容也是根据这个目录下的文件自动生成的。当然这个目录下还有很多的子目录,图片放在 drawable 目录下,布局放在 layout 目录下,字符串放在 values 目录下,所以你不用担心会把整个res 目录弄得乱糟糟的。
7.  AndroidManifest.xml
这是你整个 Android 项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本
8.  project.properties
这个文件非常地简单,就是通过一行代码指定了编译程序时所使用的 SDK 版本

 <action android:name= "android.intent.action.MAIN" /> 和

 <category android:name="android.intent.category.LAUNCHER" />表示 HelloWorldActivity 是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。


四:Log日志 (android.util.Log)

1.  Log.v()
这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是 Android 日志里面级别最低的一种。
2.  Log.d()
这个方法用于打印一些调试信息, 这些信息对你调试程序和分析问题应该是有帮助的。对应级别 debug,比 verbose 高一级。
3.  Log.i()
这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为的那种。对应级别 info,比 debug 高一级。
4.  Log.w()
这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。
5.  Log.e()
这个方法用于打印程序中的错误信息,比如程序进入到了 catch 语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别 error,比 warn 高一级。

五.隐藏标题栏

requestWindowFeature(Window.FEATURE_NO_TITLE);注意这句代码一定要在 setContentView()之前执行.

六.知晓当前在哪个活动

创建BaseActivity写入

Log.d("BaseActivity", getClass().getSimpleName());

每个activity继承baseActivity

七.随时随地退出程序

新建一个 ActivityCollector 类作为活动管理器

public class ActivityCollector {
public static List<Activity> activities = new ArrayList<Activity>();
public static void addActivity(Activity activity) {
activities.add(activity);
}
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
public static void finishAll() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}


}
在活动管理器中,我们通过一个 List 来暂存活动,然后提供了一个 addActivity()方法用于向 List 中添加一个活动,提供了一个 removeActivity()方法用于从 List 中移除活动,最后提供了一个 finishAll()方法用于将 List 中存储的活动全部都销毁掉。
接下来修改 BaseActivity 中的代码,如下所示:

public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}

在 BaseActivity 的 onCreate()方法中调用了 ActivityCollector 的 addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在 BaseActivity 中重写onDestroy()方法,并调用了 ActivityCollector 的 removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。
从此以后,不管你想在什么地方退出程序,只需要调用 ActivityCollector.finishAll()方法就可以了。例如在 ThirdActivity 界面想通过点击按钮直接退出程序,只需将代码改成如下所示


public class ThirdActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("ThirdActivity", "Task id is " + getTaskId());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.third_layout);
Button button3 = (Button) findViewById(R.id.button_3);
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ActivityCollector.finishAll();
}
});
}

八。启动活动的最佳写法

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("param1", "data1");
intent.putExtra("param2", "data2");
startActivity(intent);

修改 SecondActivity 中的代码,如下所示:
public class SecondActivity extends BaseActivity {
public static void actionStart(Context context, String data1, String data2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("param1", data1);
intent.putExtra("param2", data2);
context.startActivity(intent);
}
⋯⋯
}


button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
}
});


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值