Android学习笔记(一) 基本基础与Activity

1.引用资源

<resources>
    <string name="app_name">HelloWorld</string>
</resources>

1.1 在代码中通过R.string.hello_world可以获得该字符串的引用

1.2 在XML中通过@string/hello_world可以获得该字符串的引用

注:其中string部分是可以替换的,如果是引用的图片资源就可以替换成drawable,如果是引用的应用图标就可以替换成mipmap,如果是引用的布局文件就可以替换成layout。

android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"

2.如果你需要在XML中定义一个id,则需要使用@+id/id_name这种语法。

3.android:layout_width="match_parent" : match_parent表示让当前元素和父元素一样宽
4.android:layout_height="wrap_content":wrap_content表示当前元素的高度只要能刚好包含里面的内容就行。

5.setContentView()方法给当前的活动加载一个布局。

setContentView(R.layout.first_layout);

6.活动注册:在AndroidManifest文件中注册,活动的注册声明要放在<application>标签内,通过<activity>标签来对活动进行注册。

7.配置主活动:在<activity>标签的内部加入<intent-filter>标签,并在这个标签里添加

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

扫描二维码关注公众号,回复: 10669639 查看本文章

8.在活动中,可以通过findViewById()方法获取到布局文件中定义的元素,findViewById()方法返回的是一个View对象,我们需要向下转型将它转成实例对象。

 Button button1 = (Button)findViewById(R.id.button_1);

9.创建菜单:在onCreateOptionsMenu()中,通过getMenuInflater()方法能够得到MenuInflater对象,在调用它的inflate()方法就可以给当前活动创建菜单了。在onOptionsItemSelected中,通过item.getItemId()来判断我们点击的是哪一个菜单项。

10.销毁活动:在活动中调用finish()方法来销毁当前活动。

11.Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。

11.1 Intent大致可以分为两种:显示Intent和隐式Intent。

11.1.1 显示Intent : Intent(Context packageContext, Class<?> cls),这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构建出Intent的“意图”。Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数,这里我们将构建好的Intent传入startActivity()方法就可以启动目标活动了。

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

11.1.2 隐式Intent:指定action和category。

activity类中:
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);

AndroidManifest.xml中:
<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>

11.2 向下一个活动传递数据

第一个活动中将数据塞入Intent:
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
第二个活动中将数据从Intent中取出:
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");

11.3返回数据给上一个活动

  startActivityForResult()方法用于启动活动,期望在活动销毁时返回一个结果给上一个活动。该方法接收两个参数,第一个参数是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。
在第一个活动中:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);

  setResult()方法专门用于向上一个活动返回数据。该方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值。第二个参数则把带有数据的Intent传递回去。

在第二个活动中:
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();

  onActivityResult()是下一个活动销毁之后的回调。该方法有三个参数,第一个参数requestCode,即我们在启动活动时传入的请求码。第二个参数resultCode,即我们在返回数据时传入的处理结果。第三个参数data,即携带着返回数据的Intent。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent     
  data) {
       switch (requestCode) {
           case 1:
               if (resultCode == RESULT_OK) {
                   String returnedData = data.getStringExtra("data_return");
                   Log.d("FirstActivity", returnedData);
               }
               break;
           default:
       }
}

12.活动的生命周期

12.1 返回栈

     Android是使用task来管理活动的,一个task就是一组存放在栈里的活动的集合,这个栈也被称作返回栈。栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。

12.2 活动状态 

12.2.1 运行状态: 当一个活动位于返回栈的栈顶时,这时活动就处于运行状态。

12.2.2 暂停状态:当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。

12.2.3 停止状态:当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。

12.2.4 销毁状态: 当一个活动从返回栈中移除后就变成了销毁状态。

12.3 活动的生存周期 (Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节)

12.3.1  onCreate() 在活动第一次被创建的时候调用,在这个方法中应该完成活动的初始化操作,比如加载布局,绑定事件等。

12.3.2  onStart() 这个方法在活动由不可见变为可见的时候调用。

12.3.3  onResume() 这个方法在活动准备好和用户交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。

12.3.4  onPause() 这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

12.3.5  onStop() 这个方法在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行。

12.3.6  onDestory() 这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

12.3.7  onRestart() 这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

12.3.8  三种生存期

12.3.8.1 完整生存期 :活动在onCreate()方法和onDestory()方法之间所经历的,就是完整生存期。一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在onDestory()方法中完成释放内存的操作。

12.3.8.2 可见生存期:活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在可见生存期内,活动对于用于总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的活动不会占用过多内存。

12.3.8.3 前台生存期: 活动在onResume()方法和onPause()方法之间所经来的就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行交互。

12.4 活动的启动模式

  活动的启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。

12.4.1 standard :是活动默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式。在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

                                                   

                                                                                        standard模式示意图

12.4.2 singleTop: 当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会在创建新的活动实例。

                                               

                                                                                         singleTop模式示意图

12.4.3 singleTask:当活动的启动模式指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

                                                        

                                                                                         singleTask模式示意图                                                                   

12.4.4 singleInstance: 指定singleInstance模式的活动会启用一个新的返回栈来管理这个活动。

                             

12.5 知晓当前是哪一个活动 :新建一个基类,该基类继承自AppCompatActivity,并重写onCreate()方法,添加Log。然后让各个活动继承这个新建的基类,这样每当进入一个活动时,该活动的类名就被打印出来了。

Log.d("BaseActivity", getClass().getSimpleName());

12.6 杀掉当前进程:(killProcess()方法只能用于杀掉当前程序的进程,不能使用这个方法去杀掉其他程序)

android.os.Process.killProcess(android.os.Process.myPid());
发布了38 篇原创文章 · 获赞 6 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/swif_N_F/article/details/105405731
今日推荐