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 -> onResume2.2 :销毁
onPause -> onStop -> onDestroy2.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方法。
相关文章推荐
- Android招财进宝手势密码的实现
- 导入 Android v4 包看不到源码的解决办法
- Android 自定义View (一)
- Android SimpleAdapter 的list刷新问题。
- android开发之service详解
- android开发之service详解
- android开发之service详解
- android开发之service详解
- onInterceptTouchEvent()和onTouchEvent()
- Android 集成支付宝遇到 Unable to execute dex: Multiple dex files define
- 【Android】动态注册广播接收器
- 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException...
- 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException
- GitHub上史上最全的Android开源项目分类汇总
- Android Intent 其中一个分析
- android中Interpolator的方法详细
- Android Monkey Test
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机
- android里TextView加下划线
- Android IntentService的使用和源码分析