Android布局文件中字体大小单位一般采用sp
下面的Intent动作能够实现直接拨打电话的是Intent.ACTION_CALL
setOnTouchEvent设置返回true表示这个消息已经被处理结束,后续的handler不再接收到这个消息
开启服务,需要使用startService()
关于适配器的说法正确的是它主要用来把数据绑定到组件上
关于Handler的说法不正确的是它是实现不同进程间通信的一种机制
在Android项目的res文件夹里,存放字符串资源的子文件夹是values
android:text属性用于TextView控件的信息显示
线性布局中表示权重的属性是layout_weight
短信内容是由Intent传递的
Intent的作用的是可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
关于数据存储方式,用户登录后保存用户帐号及设置等信息,一般采用的存储方式是SharedPrferences
startService不是Service的生命周期方法
关于线程的说法,不正确的是在创建的新线程中,它可以操作UI组件
启动一个Activity主要有显式启动,程序必须在Intent中指明启动的Activity所在的类;隐式启动,无需指明具体启动哪一个Activity,Android系统会根据Intent的动作和数据来决定启动哪一个Activity。
res/raw文件夹通常存放资源文件,如音频、视频等资源,在打包后会原封不动的保存在apk包中。res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID。res/raw不可以有目录结构。
在LinearLayout布局中,所有的子元素都按照垂直或水平的顺序在界面上排列。如果垂直排列,则每行仅包含一个界面元素。如果水平排列,则每列仅包含一个界面元素。
Android应用程序运行在不同的进程空间中,因此不同应用程序的数据是不能够直接访问的。ContentProvider提供了应用程序直接共享数据的方法。应用程序通过ContentProvider访问数据而不需要关心数据具体的存储以及访问过程,这样既提高了数据的访问效率,同时也保护了数据。
SharePreference存储;File存储;SQLite数据库存储;网络存储。
当Android中的Activity因为横竖屏切换而重新创建时,其生命周期回调函数的执行顺序:onPause()->
onStop()->onDestroy()->onCreate()->onStart()->onResume()
R.java
文件将项目中所涉及到的用户界面、字符串、图片、声音等资源映射成一个ID编号。
这些编号一般为整形,自动生成,项目代码中要使用这些资源时,可以通过这个类得到资源的引用。
不能修改
线性布局(LinearLayout) 相对布局(RelativeLayout) 帧布局(FrameLayout) 表格布局(TableLayout)
Activity是Android四大组件之一。一个Activity通常就是一个单独的屏幕(窗口)。Activity之间通过Intent进行通信。Android应用中每个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将无法识别也无法执行该Activity。
在Android中,注册广播有普通广播:通过sendBroadcast(intent)发送。一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们接收的先后是随机的;有序广播:通过sendOrderedBroadcast()发送。一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递,所以此时的广播接收器是有先后顺序的,且优先级(priority)高的广播接收器会先收到广播消息。有序广播可以被接收器截断使得后面的接收器无法收到它。
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化MediaPlayer
mediaPlayer = new MediaPlayer();
try {
// 设置音乐文件的路径
mediaPlayer.setDataSource(path);
// 准备播放(异步方式)
mediaPlayer.prepareAsync();
// 设置准备完成的监听器
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 准备完成后开始播放
mp.start();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
// 释放MediaPlayer资源
mediaPlayer.release();
mediaPlayer = null;
}
}
}public class MainActivity extends Activity {
EditText et1; // 第一个输入框
EditText et2; // 第二个输入框
TextView tv; // 底部显示信息的文本框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) this.findViewById(R.id.edit1);
et2 = (EditText) this.findViewById(R.id.edit2);
tv = (TextView) this.findViewById(R.id.text1);
}
public void click1(View view) {
// 获取输入的用户名和密码
String username = et1.getText().toString();
String password = et2.getText().toString();
// 显示输入的用户名和密码
tv.setText("Username: " + username + "\nPassword: " + password);
// 将用户名和密码通过SharedPreferences接口保存
SharedPreferences sharedPreferences = getSharedPreferences("LoginData", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.apply();
Toast.makeText(MainActivity.this, "登录信息已保存", Toast.LENGTH_SHORT).show();
}
public void click2(View view) {
// 取消按钮点击事件
et1.setText("");
et2.setText("");
tv.setText("");
Toast.makeText(MainActivity.this, "取消登录", Toast.LENGTH_SHORT).show();
}
}导致一个Activity的onDestroy()方法被调用的原因是
关于Activity的描述
属于MediaPlayer对象的方法有
关于Intent的说法
关于ListView与RecyclerView
关于Service的描述,不正确的是