安卓开发记录

安卓中用户权限设置

位置:AndroidManifest.xml 在package之后, Application 之前

1
2
3
4
5
6
7
<!--用户权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--VPN 权限-->
<uses-permission android:name="android.permission.BIND_VPN_SERVICE" />

Android中Intent机制

作用

  • 启动 Activity:
    Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。 如果您希望在 Activity 完成后收到结果,请调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,您的 Activity 将结果作为单独的 Intent 对象接收。如需了解详细信息,请参阅 Activity 指南。
  • 启动服务:
    Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。 如果服务旨在使用客户端-服务器接口,则通过将 Intent 传递给 bindService(),您可以从其他组件绑定到此服务。如需了解详细信息,请参阅服务指南。
  • 传递广播:
    广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast(),您可以将广播传递给其他应用。

Intent 结构

  • action – 想要实施的动作,例: ACTION_VIEW, ACTION_EDIT, ACTION_MAIN, etc.
  • data – 具体的数据,一般由以Uri表示,例:通讯录中的某条记录,会以Uri来表示
  • category – 为实施的动作添加的额外信息,即Intent组件的种类信息,一个Intent对象可以有任意个category,例:CATEGORY_LAUNCHER 意味着,它应该在启动器中作为顶级应用而存在
  • type – 显示指定Intent的数据类型(MIME类型 - 多用途互联网邮件扩展,Multipurpose Internet Mail Extensions),例:一个组件是可以显示图片数据的而不能播放声音文件。很多情况下,data类型可在URI中找到,比如content:开头的URI,表明数据由设备上的content provider提供。但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导
    MIME类型有两种:单个记录格式、多个记录格式
  • component – 指定Intent的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的,例如:Intent it = new Intent(Activity.Main.this, Activity2.class); startActivity(it);
  • extras – 附加信息,例如:it.putExtras(bundle) - 使用Bundle来传递数据;

Service机制

启动服务时依次执行onCreate,onStartCommand,onStart;如果在系统显示调用stopService和stopSelf之前终止服务,service再次重启,onStartCommand会被调用,重启服务时依次执行onStartCommand,onStart。无论何时,都会先调用onStartCommand(),在调用onStart()。

onStartCommand返回值

onStartComand使用时,返回的是一个(int)整形。
这个整形可以有四个返回值:

1
start_sticky、start_no_sticky、START_REDELIVER_INTENT、START_STICKY_COMPATIBILITY

它们的含义分别是:

  • START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
  • START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务
  • START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
  • START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

onStartComand参数flags含义

flags表示启动服务的方式:

Additional data about this start request. Currently either 0, START_FLAG_REDELIVERY, or START_FLAG_RETRY.

START_FLAG_REDELIVERY:如果你实现onStartCommand()来安排异步工作或者在另一个线程中工作, 那么你可能需要使用START_FLAG_REDELIVERY来让系统重新发送一个intent。这样如果你的服务在处理它的时候被Kill掉, Intent不会丢失.
START_FLAG_RETRY:表示服务之前被设为START_STICKY,则会被传入这个标记。

显示

隐藏(GONE)

XML文件:android:visibility=”gone”

Java代码:view.setVisibility(View.GONE);

错误

A/libc: Fatal signal 5 (SIGTRAP), code 1 in tid 24188

JNI 中 c 函数未返回

打赏