Android(总)

版权声明:未经王小波同学允许不得转载本文内容,否则将视为侵权;博主qq:1419758909;反正也没人转载~ https://blog.csdn.net/qq_38900441/article/details/84886237

第一章  Android (概述)

活动:是Android应用程序的基本组件,一个活动就是一个单独的屏幕

意图:用来描述应用程序之间的功能,实现多个活动的跳转,利用消息实现应用程序之间的交互机制

服务:是Android应用程序中具有较长生命周期但没有用户界面的程序

内容提供器:提供了一种多应用间数据共享的方式

Android的优势:

系统的开放性和免费性

移动互联网的大力发展

相关厂商的大力支持

Android平台的技术架构:

Linux的内核层

中间层:程序库和Android运行时环境

应用程序框架

应用层

第二章 活动(Activity)

activity生命周期:

激活或者运行状态:当前屏幕显示

暂停状态:失去了焦点仍然对用户可见

停止状态:此活动被其他活动覆盖

终止状态:被系统清理出内存

七个方法:

onCreate()

onStart()

onRestart()

onResume()

onPasue()

onStop()

onDestroy()

完整生命周期(onCreate-onDestroy);可见生命周期(onStart-onStop);前台生命周期(onResume-onPause);

控制Activity屏幕横竖屏显示方式,设置参数“android:screenOrientation”landscape或portrait

调用onSaveInstanceState()通常出现在:

设备锁屏

屏幕方向发生改变

按下Home键

长按Home键

第三章 用户界面

界面元素:

视图组件:TextView Button EditText Checkbox Spinner ListView

视图容器

布局管理:线性、相对、绝对、网格、表格、框架

事件处理机制:

事件(Event)

事件源(Event Source)

事件监听器(Event Listener)

Android提供了两种创建布局的方式:XML布局文件和代码直接实现

实现事件处理步骤:

创建事件监听器

在事件处理方法编写事件处理代码

在相应组件注册事件监听器

匿名方式事件处理代码

public class MainActivity extends AppCompatActivity {
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnYellow=(Button)this.findViewById(R.id.btnYellow);
        Button btnBlue=(Button)this.findViewById(R.id.btnBlue);
        btnYellow.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                getWindow().setBackgroundDrawableResource(R.color.yellow);
            }
        });
        btnBlue.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                getWindow().setBackgroundDrawableResource(R.color.blue);

            }
        });

对应布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
   <Button
       android:id="@+id/btnYellow"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="黄色"/>
    <Button
        android:id="@+id/btnBlue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="蓝色"/> 
</LinearLayout>

创建Toast方法(没有焦点,显示时间有限)

调用Toast的静态方法makeText()创建一个指定文本和时长的提示信息

调用Toast的show()方法显示提示信息

Toast t1 = Toast.makeText(getApplicationContext(),"多显示一会",Toast.LENGTH_LONG);

t1.show();

对话框

AlertDialog提示对话框

ProgressDialog 进度对话框

DatePickerDialog日期选择对话框

TimePickerDialog时间选择对话框

创建提示对话框的步骤

获得AlterDialog的静态内部类的Builder对象,由该类创建对话框

通过Builder对象设置对话框的标题、按钮、以及按钮将要响应的事件

调用Builder的Create()方法创建对话框

调用Builder的show()方法显示对话框

对应代码

public class MainActivity extends AppCompatActivity {
    public void onCreate(Bundle saveInstanceState){
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_main);
        final TextView mytv=(TextView)findViewById(R.id.tv);
        Button btnDelete=(Button)findViewById(R.id.delete);
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                builder.setMessage("真的要删除吗?").setPositiveButton("是",new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog,int which){
                        mytv.setText("删除成功!");}
                }).setNegativeButton("否",new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog,int which){
                        mytv.setText("取消删除");
                    }
                });
                AlertDialog ad =builder.create();
                ad.show();
            }
        });
    }
}

对应布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
<Button
    android:id="@+id/delete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="删除"/>
</LinearLayout>

菜单

创建菜单选项:

覆盖activity的onCreateOptionsMenu()方法

调用Menu的add方法添加菜单选项(MenuItem)

当菜单选项被选择时,覆盖activity的onOptionsItemSelected()方法来响应事件

创建上下文菜单

重写activity的onCreateContextMenu()方法,调用menu的add方法添加菜单选项(MenuItem)

重写onCreateItemSelected()方法,响应菜单点击事件

在activity的onCreate()方法中,调用registerForContextMenu()方法,为视图注册上下文菜单

常用的widget组件:按钮、文本框、编辑框、复选框、单选按钮组、下拉列表

ActionBar的主要元素:图标和标题部分、ActionButton、OverFlow、ActionView、Tabs

意图(Intent)

终端用户用于开发应用程序交互功能的组件:广播接收器、意图、适配器、内容提供器

Intent由动作(action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)、扩展(Extra)组成

 Action属性用于描述Intent要完成的动作,对执行的动作进行一个简要描述

Data执行动作的URI和MIME类型

Category指明一个执行Action的分类

Component的属性用于指明Intent的目标组件的类的名称

Extra用于添加一些附加信息(可以利用该属性进行消息传递) --将信息存放到Extra属性有两种方式:一是直接将信息添加到Extra属性中,另一种是将数据封装到Bundle包中

显示Intent:

Inten intent=new Intent();

intent.setClass(Activity1.this,activity.class);

隐式通过Intent Filter过滤实现的 

Extra属性 

Intent intent=new Intent();

intent.putExtra("name","wanglibo");

意图实现跳转

MainActivity.java

public class MainActivity extends AppCompatActivity {
    public void onCreate(Bundle saveInstanceState){
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_main);
        Button btnjump=(Button)findViewById(R.id.jump);
         btnjump.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Intent intent =new Intent();
              intent.setClass(MainActivity.this,SecondActivity.class);
              startActivity(intent);
          }
      });
    }
}

SecondActivity.java

public class SecondActivity extends Activity {
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Button btn_back=(Button)findViewById(R.id.returnBack);
        btn_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myinten=new Intent();
                myinten.setClass(SecondActivity.this,MainActivity.class);
                startActivity(myinten);
                SecondActivity.this.finish();
            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="first activity"/>

    <Button
        android:id="@+id/jump"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转"
        />
</LinearLayout>

activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="second activity"/>
    <Button
        android:id="@+id/returnBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"/>

</LinearLayout>

 实现广播和接收Intent机制步骤:

1、注册相应广播接收器,广播接收器就是接收广播消息并对消息作出响应的组件

2、发送广播,将消息内容和用于过滤的信息封装起来,广播给广播接收器

3、满足条件的广播接收器执行接受方法onReceiver()

4、销毁广播接收器。

activity的sendBroadcast()、sendOrderBroadcast()、sendStrikyBroadcast()都可以广播Intent到广播接收器

Intent的过滤机制
      Intent过滤器是用来通知系统它们能够处理哪种类型隐式的 Intent对象, Activity、Service、 Broadcast Receiver能够有一个或多个 Intent过滤器。每个过滤器都描述了组件的一种能力,说明了组件将会接受的 Intent对象集。它滤如有效的期望类型的 Intent对象,滤出不想要的 Intent对象。隐式的 Intent对象仅能发送给能够通过组件的一个过滤器来传递它的一组件
         一个 Intent过滤器是 IntentFilter类的实例。 Intent过滤器通常都不是用Java代码来建立的,而是在应用程序的清单文件( AndroidManifest. xml)中用< -intent-filter>元素来声明。
        过滤器有类似于 Intent对象的动作、数据、和分类的字段,过滤器会用这三个域来检测个隐式的 Intent对象。对于要传递给拥有过滤器的组件的 Intent对象,必须传递所有的这三个要检测的字段。如果其中之一失败了, Android系统也不会把它发送给对应的组件-至少在基于那个过滤器的基础上不会发送
 

Android广播机制指的是,可以通过实现广播接收器来监听和响应这些广播的Intent。

通常广播Intent用于向监听器通知系统给事件或应用程序事件,从而扩展应用程序间的事件驱动的编程模型。

广播Intent可以使应用程序更加开放,通过使用Intent来广播一个事件,可以在不用修改原始应用程序的情况下,对事件作出响应。

Android中大量使用广播Intent来广播系统事件,如电池电量、网络连接和来电。
 

第五章 服务(Service)

Service提供程序的后台服务,分为本地服务和远程服务两种类型

Service特点

没有用户界面,不与用户交互

长时间运行,不占程序控制权

比Activity优先级高,不会轻易被Android系统终止,即使Service被系统终止,在系统资源恢复后Service仍将自动运行

用于进程间通信,解决两个不同进程之间的调用和通信问题

实现Service

创建一个Service类并配置

启动并绑定Service

停止Service

Service生命周期

onCreate()方法用来初始化Service,标志着Service生命周期的开始

onStart()用来启动一个Service,代表Service进入了运行状态

onDestroy()方法用来释放Service占用的资源,标志着Service生命周期的结束

Service的启动方式:

启动方式:

使用Context.startService()方法启动Service,调用者与Service没有关联,即使调用者退出,Service服务依然运行

调用Context.stopService()或Service.stopSelf()方法结束服务 

启动Service的代码:

Inten inten = new Intent();

inten.setAction(".MY_SERVICE");

intent.setPackage(getPackageName());

startService(intent);

è¿éåå¾çæè¿°

绑定方式:

通过Context.bindService()方法启动Service,调用者与Service绑定在一起,调用者一旦退出,Service服务也就终止

通过调用Context.unbindservice()解除绑定服务 

è¿éåå¾çæè¿°

Myservice 类覆盖Sevice生命周期的各个方法

public class Myservice extends Service {
    public IBinder onBind(Intent intent){
        Log.i("service","on bind-----");
        Toast.makeText(Myservice.this,"onBind---",Toast.LENGTH_LONG).show();
        return new MyBinder();
    }
    public void onCreate(){
        Log.i("service","on create-----");
        Toast.makeText(Myservice.this,"onCreate---",Toast.LENGTH_LONG).show();

    }
    public void onStart(Intent intent,int startId){
        Log.i("service","on start-----");
        Toast.makeText(Myservice.this,"onStart---",Toast.LENGTH_LONG).show();
    }
    public void onDestroy(){
        Log.i("service","on destroy-----");
        Toast.makeText(Myservice.this,"onDestroy---",Toast.LENGTH_LONG).show();
    }
    public class MyBinder extends Binder{
        public Myservice getService(){
            return Myservice.this;
        }
    }
}

--Android提供大量的系统服务,这些系统服务用于完成不同的功能,通过Context.getSystemService()获取不同服务管理对象

--NotificationManager类是系统的通知服务管理类,它能够将通知Notification信息显示在状态栏上

第六章 数据存储

Android数据存储方式:

Preference:是一个轻量级存储机制,适合简单数据存储,以“key-value”存储在XML文件

File:不适合结构化,适合存储较大数据

SQLite:适合移动设备中复杂数据的存储,Android已经继承了SQLite数据库,能很容易的对数据增、删、插、更,比较复杂(轻量级、独立、便于管理和维护、可移植性、语言无关、事务性)

网络:通过java.net.*和android.net.*包中的类存储于网络

SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本更新

Content Provider是所有应用程序之间数据存储和检索的一个桥梁,其作用就是使得各个应用程序之间实现数据共享

ContentProvider:ContentProvider是不同应用程序之间进行数据交换的标准API。ContentProvider以某种Uri的形式对外提供数据,允许其它应用访问和修改数据;其它应用使用ContentResolver根据Uri去访问操作指定数据。

猜你喜欢

转载自blog.csdn.net/qq_38900441/article/details/84886237