Android基本概念总结

Android工程师

源码开发(手机定制软件)

系统开发(驱动 系统软件)

应用开发 (单机 联网 游戏 应用)


一.Android应用程序的组成部分

Activity 

    Activity 应用程序的表示层。应用程序中的每一个UI都是通过Activity类的一个或多个扩展实现的。Activity使用Fragment和试图来布局和显示信息,以及响应用户动作。

 

Service

   应用程序中不可见的工作者。Service组件在运行时没有UI,它们可以更新数据源和Activity,触发通知和广播Intent。它们被用来执行一些运行时间长的任务,或者不需要用户交互的任务(例如,即使当应用程序的Activity不是活动的或者可见的时候也需要继续进行网络查找或其他网络任务)

 

Intent

   一个强大的应用程序间的消息传递框架。安卓中大量使用了Intent,它可以用来启动和停止activity和service,在系统范围内或向目标Activity,service或者Broadcast Receiver广播消息,以及请求对特定的一条数据执行操作。

 

Broadcast Receiver

   Intent侦听器。Broadcast Receiver使应用程序可以监听到那些匹配指定的过滤器标准的Intent广播。Broadcast Receiver会自动地启动应用程序来响应某个收到的Intent,这个特点使它们成为了事件驱动的应用程序的最佳选择。


Content Provider

   一个可以共享的持久数据存储器。Content Provider用来管理和持久化应用程序数据,通常会与SQL数据库交互。Content Provider是在应用程序之间共享数据的首选方法。可以通过配置自己的Content Provider来允许其他应用程序访问,也可以访问其他应用程序提供的Content Provider。安卓设备包含了多个本地的Content Provider来提供有用的数据库,如媒体和联系人信息等。

 

二.关于安卓的目录结构

   src     编写Java代码的目录   遵循Java的命名方法

   gen     包含了android的资源文件的标识符  不需要程序员维护  自动生成  不要轻易删除gen/下面有一个重要的文件R.java,这个文件由系统为一些资源自动生成唯一标识的ID,想象以前的VC中也有类似的文件。R相当于resourse

   assets  原生资源文件

   bin     编译后的apk应用程序

   libs    第三方类库

   res     资源包我们在res/中加入某些资源,例如一个图标,会在gen/下的R.java中生成一个ID,而assets下的资源将不会,需要通过路径来进行访问。res/drawable/中用于存放image,对于图标,提供hml三个分辨率,以适用不同分辨率的设备。

    --drawable-XXdpi包含安卓应用中的图片资源文件  按照清晰度分为高清  低清晰度  标清  超高清  非常超高清

    --layout    布局文件 完成UI控件的堆放

    --menu   菜单     安卓的应用菜单

    --values 字符资源文件   通常使用在手机的国际化

AndroidManifest.xml文件(包名   apk版本  apk图片   说明  相关的授权

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.class04"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.class04.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

在这里icon为:@drawable/icon,就是在res/drawable/中名字为icon的image。而@string /app_name,表示在res/values/strings.xml中的定义名字为app_name的字符串,在这个例子中 文"Hello,Andriod"。activity这里表明的activity的执行目标的类名称。

如果我们需要给我们的应用设定用户的许可,例如允许使用GPS,可以加上<uses-permission android:name="android.permission.ACCESS_GPS /">

网络权限

 <uses-permission android:name="android.permission.INTERNET"/>

每一个Activity都需要在Andriodmanifest.xml文件进行注册。一个映用有多个Activity,里面的类名".HelloAndriod",注意是有一个".",它和package结合起来就是一个完整的类命。而后面<intent-filter>...</intent-filter>中有android.intent.action.MAIN,表明这是应用启动时需要启动的Activity。

 

修改新建工程默认布局

D:android-sdk-windows ools emplatesactivitiesBlankActivity oot eslayout activity_simple.xml.ftl

 

三.Activity的生命周期

三种状态:

 

Resumed

Paused--可能会被系统杀掉  当内存不够时

Stoped--表示现在的activity被另外一个activity完全遮盖


当一个activity处于Paused或者Stoped状态时  可能会被finish

 

七种方法:参见详细图

onCreate  当activity第一次被创建时,你可以创建一个view ,绑定数据 

onStart  变成可见的

onResume

onPause  当其他的activity正在运行

onStop

onDestroy

onRestart

onStart  


 

startActivity() 和 startActivityForResult()

   在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。貌似启动 Activity 的只有 startActivity() 和 startActivityForResult(),之前只学会了前者能初始化一个Bundle,但用起来发现不对劲。用startActivity启动 主界面是一个新的Intent实例,那个我要去访问的主界面还在activity栈的下面没有调出来,而且这样做的一个最大的问题是,回不到原界面就不能多个子功能模块共同来给主界面提供数据或服务了。

 

解析代码:

   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     //必须位于程序的第一行 主要用来加载xml的布局  系统会编译成View的对象
        setContentView(R.layout.activity_main);
        Log.i(TAG,"--onCreate 方法-->>");
  }

任何一个View都有一个整型的ID来相关联

到时候可以通过id来初始化相关按钮   达到一一对应

 

常见开发步骤

1.画布局

2.通过R文件中的id来查找xml对象

Button button = (Button) findViewById(R.id.button1);

3.绑定事件

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
       Intent intent =  new Intent(MainActivity.this,NextActivity.class);
       String a = editText1.getText().toString().trim();
       String b = editText2.getText().toString().trim();
       intent.putExtra("msg", a+"+"+b+"="+"?");
       startActivityForResult(intent, 1000);
    }
});


四.布局

--LinearLayout   线性布局

LinearLayout里面的空间,按照水平或者垂直排列:

orientation=“horizontal”---水平排列;     orientation=“vertical”---垂直排列

当LinearLayout 是horizontal ,并且里面的控件使用了layout_width="fill_parent" ,第二组控件会挡在屏幕的右边,那也就看不到了。

 

--AbsoluteLayout 绝对布局

是一个按照绝对坐标定义的布局,由于使用绝对坐标去定位控件,因此要实现自适应界面时,应尽少使用 AbsoluteLayout 。 AbsoluteLayout 里面的控件都以layout_x 、layout_y 来定义其位置

 

--RelativeLayout  相对布局

是一个按照相对位置排列的布局,跟AbsoluteLayout这个绝对坐标布局是个相反的理解

 

--FrameLayout    帧布局

顾名思义跟帧有关,布局里所有的控件都被放到布局的左上角,并且一层覆盖一层

 

--TableLayout    表格布局

 

--GridView

 

布局和布局之间不要嵌套太对   一般不要超过三层

 

--GalleyView  画廊


Android:layout_gravity:表示子元素位于父元素的垂直位置

Android:gravity 里面的内容居中(子元素,控件内部的元素)

Android:layout_weight:  1 权重  越大占的比例越大

 

Android:layout_marginLeft:

Android:layout_margin:  以左上角为原点

 

Android:paddingTop:1dp  内边距   带文字的

Androidhint

 

控件大小用 ---- dp     文字大小 ---- sp

 

AlertDialog

 * setIcon :为对话框设置图标

 * setMessage:为对话框设置内容

 * setView : 给对话框设置自定义样式

 * setItems :设置对话框要显示的一个list,一般用于显示几个命令时

 * setMultiChoiceItems :用来设置对话框显示一系列的复选框

 * setNeutralButton    :普通按钮

 * setPositiveButton   :给对话框添加"Yes"按钮

 * setNegativeButton :对话框添加"No"按钮

 * create : 创建对话框

 * show :显示对话框

 

PopupWindow

PopupWindow在android.widget包下,弹出窗口的形式展示。官方文档对该控件的描述是:“一个弹出窗口控件,可以用来显示任意视图 (View),而且会浮动在当前 活动(activity)的顶部”。PopupWindow可以让我们实现多种自定义控件,例如:menu、alertdialog等弹窗似的View。


TabHost,TabWidget

TabHost控件->TabWidget(必须命名为tabs)->FrameLayout(必须命名为tabcontent)。


Style 与 Theme

 

Button

 

RadioButton

 

Switches


ScrollView

ScrollView里面只能有线性布局  其他可以加到线性布局里面


五.Adapter适配器

适配器是adapterView和数据源之间的桥梁

它可以帮我们创造一个view  数据可以来源于网络或者数据库

为每一条数据创建一个可以展现数据的控件

 

ArrayAdapter 数组

CursorAdapter  使用数据库

 

Android请求本地服务器时不能使用localhost和127.0.0.1,因为它会把模拟器当本机,需要使用10.0.2.2

 

六.网络与线程

使用httpPost提交请求

HttpClient httpClient = new DefaultHttpClient();

UrlEncodedFormEntity  纯文本表单提交  不包含文件

 

UI控件


Android线程

 

UI主线程

1.不要阻塞UI线程

2.不要UI以外的线程中

 

两种机制

不要在UI主线程中访问网路

 

使用AsyncTask

允许使用异步的工作在UI上,可能是一个阻塞的操作,可以把结果发布给UI

 

申明一个类继承AsyncTask 并且实现一个doInbackground()方法,通过这个方法把结果传递给UI.

 

三个参数

Params                   传递的参数

Progress  进度条

Result                   返回的结果

 

四个步骤   不要手动调用这四个方法

1.onPreExecute     执行异步任务之前

2.doInBackground   后台执行,调用publishProgress把值传到第三个方法

3.onProgressUpdate

4.onPostExecute   更新UI


七. 其它

Dialog

AlertDialog  警告框

 

触发事件的几种方式

1.匿名内部类:

button.setOnclickListener(new View.OnClickListener{

 

});

2.实现接口


通过xml定义ui控件

View layout = LayoutInflater.from(MainActivity.this).inflate(R.layout.toast,null);

TextView textView = (TextView )layout.findViewById(R.id.x);


================================== 赵客缦胡缨,吴钩霜雪明。 银鞍照白马,飒沓如流星。 ==================================
原文地址:https://www.cnblogs.com/lucare/p/9312663.html