您的位置:首页 > 移动开发 > Android开发

android整理的一些基础知识

2015-07-21 16:28 746 查看

本篇文章内容大部分是来源于本人实际开发中的心得总结,不是非常全面,咱才疏学浅,如果有错误的地方恳请各位指出哦~


android四大组件

四大组件包括:Activity(活动),Service(服务),BroadcastReceiver(广播接收器),ContentProvider(内容提供器)

他们的一个特性是都是需要在androidManifest.xml里面注册

1:Activity篇

活动是一个包含各种元素的界面,主要用于和用户进行交互。

1.1:如何启动Activity

1.1.1:显示启动,明确指明活动的类名

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);


1.1.2:隐式启动,匹配活动的名称与类型

在AndroidManifest.xml指定名称(action)和类型(category)

<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>


代码:

Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);


1.2:Activity启动模式

通过stack栈管理,参考

1.3:Activity如何传值

与fragment结合的传值例子,参考

2:Activity生命周期

2.1:创建

onCreate -> onStart -> onResume

2.2 :销毁

onPause -> onStop -> onDestroy

2.3:生命周期

在当前activity A上,启动 activity B,此时执行顺序是

A onPause -> B 执行 onCreate -> A onStop

B调用finish()结束自己,此时执行顺序是

B 执行onStop ->A onRestart ->A onStart -> A onResume

package zhexian.app.smartcall.lib;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;

import zhexian.app.smartcall.contact.ContactEntity;
import zhexian.app.smartcall.image.ZImage;
import zhexian.app.smartcall.tools.Utils;

import static android.provider.ContactsContract.Data.CONTENT_URI;
import static android.provider.ContactsContract.Data.MIMETYPE;
import static android.provider.ContactsContract.Data.RAW_CONTACT_ID;

public class ZContact {

public static boolean isPhoneExists(Context context, String phone) {
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phone);
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data.DISPLAY_NAME}, null, null, null);

boolean isExist = cursor.moveToFirst();
cursor.close();
return isExist;
}

public static void Add(Activity activity, ContactEntity entity) {
ContentValues values = new ContentValues();

ContentResolver content = activity.getContentResolver();
Uri rawContactUri = content.insert(
ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);

//name
values.clear();
values.put(RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, entity.getUserName());
content.insert(CONTENT_URI, values);

// dept
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, entity.getCompany());
values.put(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, entity.getDepartment());
values.put(ContactsContract.CommonDataKinds.Organization.TITLE, entity.getJobTitle());
values.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
content.insert(CONTENT_URI, values);

//phone
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, entity.getPhone());
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE);
content.insert(CONTENT_URI, values);

//short phone
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, entity.getShortPhone());
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
content.insert(CONTENT_URI, values);

// avatar
values.clear();
values.put(
android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID,
rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, Utils.ConvertBitMapToByte(entity.getAvatarURL(), ZImage.getInstance().getBitMap(entity.getAvatarURL())));
content.insert(CONTENT_URI, values);
}
}


View Code

6:Message,Handler,Message Queue,Looper之间的关系。

在线程和ui元素交互时,我们使用Handler来避免线程安全问题。

Message作为Handler的方法sendMessage()参数,在调用Handler的时候一并传递过去。

Message放在Message Queue里面,等待Looper循环取出,作为参数回调其Handler的handleMessage方法。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: