第一行代码--笔记(1)
自娱自乐,重在过程,一切都是最好的安排
activity启动器
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
关于Log:
1. Log.v() 这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是 Android日志里面级别最低的一种。
2. Log.d() 这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助 的。对应级别 debug,比 verbose高一级。
3. Log.i() 这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮 你分析用户行为的那种。对应级别 info,比 debug高一级。
4. Log.w() 这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好 去修复一下这些出现警告的地方。对应级别 warn,比 info高一级。
5. Log.e() 这个方法用于打印程序中的错误信息,比如程序进入到了 catch语句当中。当有错 误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级 别 error,比 warn高一级。
隐藏actionbar:
requestWindowFeature(Window.FEATURE_NO_TITLE) 的意思就是不在活动中显示 标题栏,注意这句代码一定要在 setContentView()之前执行
getMenuInflater().inflate(R.menu.main, menu); 加载菜单布局
Intent常用显式启动Activity
隐式:
隐式启动
Intentintent=newIntent("com.example.activitytest.ACTION_START"); intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
<intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.example.activitytest.MY_CATEGORY"/> </intent-filter>
隐式启动浏览器地址
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent);
在<intent-filter>标签中再配置一个<data>标签,用于更精确地指 定当前活动能够响应什么类型的数据。<data>标签中主要可以配置以下内容。
1. android:scheme 用于指定数据的协议部分,如上例中的 http部分。 <data android:scheme="http" />
2. android:host 用于指定数据的主机名部分,如上例中的 www.baidu.com 部分。
3. android:port 用于指定数据的端口部分,一般紧随在主机名之后。
4. android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
5. android:mimeType用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
调用系统拨号界面
Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent);
第一个activity获取第二个返回的数据:
第一个activity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1);
第二个activity
Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish();
或
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
当用户按下 Back键,就会去执行 onBackPressed()方法中的代码
Activity生命周期
在MainActivity 中添加如下代码就可以将临时数据进行保存:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); String tempData = "Something you just typed"; outState.putString("data_key", tempData); }
在onCreate中取出的方法:
if (savedInstanceState != null) { String tempData = savedInstanceState.getString("data_key"); }
四种启动模式:standard、singleTop、singleTask 、singleInstance
默认为standard
singleTop:在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。android:launchMode="singleTop"可以很好地解决重复创建栈顶活动的问题
singleTask:让某个活动在整个应用程序的上下文中只存在一个实例android:launchMode="singleTask" 每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
singleInstance:有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。