Android第一行代码学习笔记总结

来源:互联网 发布:数据采集卡品牌 编辑:程序博客网 时间:2024/04/29 03:04

Activity生命周期

onCreate()->onStart()->onResume()
->onPause()->onStop()->onDestroy().

Activity启动模式

  • standard,标准模式
  • singleTop,重用栈顶模式
  • singleTask,重用实例,并将实例回到栈顶
  • singleInstance,创建新栈管理并共享该实例

随时随地退出程序

使用ActivityCollector管理启动的Activity,最后循环finish

public void finishAll() {   for (Activity activity : activities) {     if (!activity.isFinishing()) {       activity.finish();     }   } }

启动活动的最佳方法

在要启动的Activity中使用静态方法,并传递形参,减少开发麻烦

public static void actionStart(Context context, String param) {    Intent intent = new Intent(context, ShowAllBooksActivity.class);    intent.putExtra("param", param);    context.startActivity(intent);  }

布局

  • LinearLayout中一个使用weight = “1”,另一个使用wrap_content,则第二个控件wrap_content,第一个控件占满剩余空间
  • TabLayout中使用stretchColumns = “1”, 如果不能占满屏幕,指定第二列进行拉伸。

Nine-Patch图形

左边框和上边框喝点标记的区域是图片拉伸的区域
下边框和右边框表示内容被放置的区域

Fragment生命周期

onAttach()->onCreate()->onCreateView()->onStart()->onResume()
->onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()

Fragment注意事项

  • OnCreate()仅执行一次
  • 使用addToBackBackStack() 时Fragment视图并不会销毁,此时onCreateView()方法也不会执行
  • Fragment中也可以使用 savedInstanceState来保存数据,onCreate(),onCreateView(),onActivityCreated()中可以获取此bundle
  • 通过限定符可以设置在不同屏幕下的显示效果
    Smallest-width Qualifier:layout-sw600dp:屏幕宽度大于600dp时,加载其文件夹下的布局。

广播接收者

  • 标准广播是一种完全异步的广播,所有广播接收器几乎 同一时刻接收广播
  • 有序广播是一种同步执行的广播,广播是一级一级的传递的,优先级高的可以截断正在传递的广播
    静态注册的广播在清单文件中注册,动态注册的广播在代码中注册,且一定要取消注册才行
  • 静态广播不需要程序启动即可接收到
  • onReceive()方法中不能执行耗时操作
  • 广播是一种跨进程通信的方式,要保证只有本应用能接受到,需要用到LocalBroadCastReceiver
  • 本地广播无法通过静态注册的方式来接收

持久化

  • 文件data/data/$packagename/files/
openFileOutput("data",Context.MODE_PRIVATE);openFileInput("data",Context.MODE_PRIVATE);
  • SharedPreferences
SharedPreferences sf = getSharedPreferences(name,Mode);SharedPreferences.Editor editor  = sf.edit();editor.apply();
  • 数据库
继承SQLiteOpenHelper抽象类getReadableDatabase();getWritableDatabase();多数情况下我们使用的是数据库框架来做

内容提供器

  • 使用一个Uri(由权限和路径组成)进行数据库的增删改查操作。

  • 权限一般使用包名,用于区分程序的

  • 路径即表名,用于对表做区分的,实例:
content://com.example.app.provider/table1
  • query对应的参数:

    uri:应用程序表
    projection:查询列名
    selection:where 约束
    selectionArgs:位where中的占位符提供具体的值
    orderBy:结果排序方式

  • UriMatcher:内容uri匹配

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);uriMatcher.addURI(AUTHORITY,PATH, CODE);
  • 注意方法:

    getType():获取Uri对象所对应的MIME类型

  • MIME分为三部分:

    以vnd开头
    后接android.cursor.dir (以路径结尾)或者android.cursor.item(以id结尾)
    最后:vnd.<authority>.<path>结尾
    实例:vnd.android.cursor.dir/vnd.com.example.app.provider.table1

  • uri.getPathSegments():将Uri权限之后的部分以“/”进行分隔。

Service

  • service执行在主线程

  • onCreate在服务第一次创建的时候掉用,onStartCommand()则在每次启动服务的时候都会掉用,

  • Activity和Service通信需要借助binder对象,在Service中创建Binder的实例,在OnBind()方法中返回这个实例,Activity中提供ServiceConnection实例.

  • ServiceConnection的匿名类,在里面复写onServiceConnected()和 onServiceDisconnected(),这两个方法分别在成功绑定和解绑的时候掉用.onServiceConnected()中可以获取binder对象,进而与Service通信

  • 在bindService中需要传递三个参数,第一个是启动Service的Intent对象,第二个是ServiceConnection实例,第三个是一个标志位。

  • 开启前台服务startForeground(1,notification);//id 和 notification实例

  • IntentService,开启子线程执行Service,在执行完毕后自动stopService.

位置服务及传感器

通过系统内置的各种Manager及Listener来实现

单元测试

  • 继承AndroidTestCase并在清单文件中注册instrumentationuses-library标签.
  • setUp() : 所有的测试用例执行之前调用,用于做一些初始化操作
  • tearDown() :所有的测试用例执行之后调用,用于做一些资源释放操作
  • assertEquals断言的方式来测试相关方法
0 0