La novena semana del resumen de aprendizaje de desarrollo de Android

Escribir en frente

Después de mucho tiempo, las palomas finalmente fueron recogidas frente al sprint. Jugué demasiado en las últimas semanas y me olvidé del negocio. Comience el estudio formal a continuación.
En estos días aprendí el contenido de la actividad. Es uno de los cuatro componentes principales de Android, posiblemente lo más fundamental.

Comprender AndroidManifest.xml

Este archivo existe para describir nuestro archivo de proyecto. Nuestros cuatro componentes deben registrarse en el archivo de manifiesto para que funcionen correctamente. Como se muestra en la figura:

aplicación es el nombre completo de APP, que representa todo nuestro proyecto de aplicación. Podemos configurar el icono de la aplicación, el nombre y otros atributos en él.
La siguiente es la declaración de registro de actividad. Contiene filtrado de intención, utilizado para configurar la entrada de inicio de la aplicación, etc.

Salto de interfaz

Salto explícito de aplicación intencional

La implementación es muy simple, el siguiente código:

                //显式启动的第一种写法
                Intent intent = new Intent();
               intent.setClass(MainActivity.this,SecondActivity.class);
                startActivity(intent);

                //显式启动的第二种写法
               Intent intent1 = new Intent();
               intent1.setClassName(MainActivity.this,"com.test.activitiyleanring.SecondActivity");
               startActivity(intent1);

                //显式启动的第三种写法
               Intent intent = new Intent();
               ComponentName componentName = new ComponentName(MainActivity.this,SecondActivity.class);
              intent.setComponent(componentName);
             startActivity(intent);

De hecho, en circunstancias normales, todos escribimos esto (la forma más utilizada):

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

Intención implícita en la aplicación Salto de actividad

                //隐式启动的第一种写法
                Intent intent = new Intent("abcd.SecondActivity");
                startActivity(intent);
                //隐式启动的第二种写法
                Intent intent = new Intent();
                intent.setAction("abcd.SecondActivity");
                startActivity(intent);

El llamado intento implícito en realidad no está claro qué actividad quiero iniciar, y leer desde el directorio de actividades.

¿El uso de intención explícita e intención implícita?

Habiendo dicho tanto, también estoy perplejo. La intención implícita es tan problemática, ¿por qué usarlo? De hecho, es iniciar una aplicación de terceros (como llamar a la cámara de un teléfono móvil, etc.)
Luego echemos un vistazo a cómo iniciar una aplicación de terceros de forma explícita e implícita:

Intento explícito de lanzar aplicaciones de terceros

    /**
     * 这个方法会在点击按钮的时候执行
     *
     * @param view 这个其实是我们点击的button
     *             <p>
     *             其实组件的名称 ComponentName = 包名/类得路径名称,如果类和前面的包名一样就可以省略成.
     *             <p>
     *             以下这种方式是显式意图跳转到浏览器界面
     */
    public void skip2BrowserVisible(View view) {
        Log.d(TAG, "skip2Browser");
        Intent intent = new Intent();
        //第一种写法
        //intent.setClassName("com.android.chrome","com.android.browser.BrowserActivity");
        //第二种写法
        ComponentName componentName = new ComponentName("com.android.chrome", "com.android.browser.BrowserActivity");
        intent.setComponent(componentName);
        startActivity(intent);
    }

Como puede ver, tenemos que encontrar el nombre del paquete, etc., lo cual es muy problemático.
¿Qué pasa con el inicio implícito?

Intento implícito de lanzar aplicaciones de terceros

   /**
     * 下面我们通过隐式意图跳转到浏览器界面
     * 步骤:
     * 1.创建Intent对象
     * 2.给Intent对象设置Action值,设置它的category值,如果5.1以上系统需要设置包名
     * 3.startActivity来跳转到另外一个界面
     *
     * @param v
     */
    public void skip2BrowserInvisible(View v) {
        Intent intent = new Intent();
//        <intent-filter>
//        <action android:name="android.intent.action.SEARCH" />
//        <category android:name="android.intent.category.DEFAULT" />
//        </intent-filter>
        intent.setAction("android.intent.action.SEARCH");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setPackage("com.android.browser");
        startActivity(intent);
    }

Como puede ver, el inicio implícito es relativamente simple. Esta es la razón por la cual el inicio implícito a menudo se usa para iniciar aplicaciones de terceros.

Darse cuenta del valor de salto de interfaz

Pasar por valor

Primero mira el código:

    private void initListener() {
        mLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里面也就是登陆按钮被点击了
                Log.d(TAG,"login被点击了");
                handlerLogin();
            }
        });
    }

    private void handlerLogin() {
        String accountText = mAccount.getText().toString().trim();
        if (TextUtils.isEmpty(accountText)) {
            Toast.makeText(this,"输入的账号为空!",Toast.LENGTH_SHORT).show();
            return;
        }
        String passwordText = mPassword.getText().toString().trim();
        if (TextUtils.isEmpty(passwordText)) {
            Toast.makeText(this,"输入的密码为空!",Toast.LENGTH_SHORT).show();
            return;
        }
        //有密码有账号以后,我们把数据传到另外一个界面
        //先要创建一个意图对象,然后通过startActivity方法来跳转
        /**
         * 这部分是用于显式意图跳转到另外一个Activity
         */
        //Intent intent = new Intent(this,SecondActivity.class);
        Intent intent = new Intent();
        String packageName = this.getPackageName();
        String  targetActivityClsName = SecondActivity.class.getName();
        intent.setClassName(packageName,targetActivityClsName);
        Log.d(TAG,"packageName "+packageName);
        Log.d(TAG,"className "+ targetActivityClsName);

        intent.putExtra("account",accountText);
        intent.putExtra("password",passwordText);
        startActivity(intent);

Como puede ver, usamos el método putExtra para poner el valor, y luego lo recibimos en la segunda interfaz:

public class SecondActivity extends Activity {
    private static final String TAG = "SecondActivity";
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        TextView info = this.findViewById(R.id.info);
        Intent intent = getIntent();
        String account = intent.getStringExtra("account");
        String password = intent.getStringExtra("password");
        Log.d(TAG,"account =="+account);
        Log.d(TAG,"password =="+password);
        info.setText("您的账号是:"+account+"  密码是:"+password);

    }
}

De manera similar, también se pueden pasar objetos, etc., pero la clase de usuario debe serializarse (implementa Parcelable), luego usar el método putExtra

Devolución de llamada

                Intent intent = new Intent(MainActivity.this,PayActivity.class);
                //第一步,使用startActivityForResult代替原来的startActivity
                startActivityForResult(intent,PAY_REQUEST_CODE);
    /**
     * 返回的结果会在这里回调
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PAY_REQUEST_CODE) {
            String resultContent = null;
            if (resultCode == 2) {
                //充值成功
                resultContent = data.getStringExtra("resultContent");
            }else if(resultCode ==3){
                //充值失败
                resultContent = data.getStringExtra("resultContent");
            }
            mPayResultText.setText(resultContent);
        }
    }

La devolución de llamada es un poco más problemática. Primero, debe usar el método startActivityForResult y luego sobrescribir el método onActivityResult para obtener los parámetros de devolución de llamada.

Ciclo de vida de la actividad

También he aprendido antes que el ciclo de vida onCreate onStart onResume onPause onStop onDestroy se mueve en orden. Entre ellos, generalmente almacenamos datos en el método onDestroy y luego los restauramos en el método onCreate.

El efecto de las pantallas horizontales y verticales en el ciclo de vida de la actividad

La pantalla horizontal y vertical hará que la actividad se destruya y se reinicie, lo que causará algunas dificultades en el desarrollo. En este momento, podemos arreglarlo y configurarlo:

android:configChanges="keyboardHidden|screenSize|orientation"

Supongo que te gusta

Origin www.cnblogs.com/wushenjiang/p/12709229.html
Recomendado
Clasificación