A nona semana do resumo do aprendizado de desenvolvimento do Android

Escreva na frente

Depois de muito tempo, os pombos foram finalmente apanhados na cara do sprint. Joguei muito duro nas últimas semanas e esqueci o negócio. Comece o estudo formal abaixo.
Esses dias eu aprendi o conteúdo da atividade. É um dos quatro principais componentes do Android, sem dúvida a coisa mais fundamental.

Noções básicas sobre AndroidManifest.xml

Este arquivo existe para descrever nosso arquivo de projeto.Todos os quatro componentes precisam estar registrados no arquivo de manifesto para funcionar corretamente. Conforme mostrado na figura:

application é o nome completo do APP, representando todo o projeto do aplicativo. Podemos definir o ícone do APP, o nome e outros atributos nele.
A seguir, é apresentada a declaração de atividade do registro. Ele contém filtragem de intenção, usada para definir a entrada de inicialização do aplicativo, etc.

Salto de interface

Salto de aplicativo com intenção explícita

A implementação é muito simples, o seguinte 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 fato, em circunstâncias normais, todos escrevemos isso (a maneira mais usada):

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

Salto de atividade no aplicativo com intenção implícita

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

Na verdade, a chamada intenção implícita não está clara de qual atividade eu quero iniciar e lida no diretório de atividades.

O uso de intenção explícita e intenção implícita?

Dito isso, também estou intrigado.A intenção implícita é tão problemática, por que usá-lo? De fato, é para iniciar um aplicativo de terceiros (como ligar para uma câmera de celular, etc.)
Vamos dar uma olhada em como iniciar um aplicativo de terceiros de forma explícita e implícita:

Intenção explícita de iniciar aplicativos de terceiros

    /**
     * 这个方法会在点击按钮的时候执行
     *
     * @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 você pode ver, temos que encontrar o nome do pacote, etc., o que é muito problemático.
E a inicialização implícita?

Intenção implícita de iniciar aplicativos de terceiros

   /**
     * 下面我们通过隐式意图跳转到浏览器界面
     * 步骤:
     * 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 você pode ver, a inicialização implícita é relativamente simples. É por isso que a inicialização implícita é frequentemente usada para iniciar aplicativos de terceiros.

Perceba o valor da passagem de salto da interface

Passe por valor

Primeiro, olhe o 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 você pode ver, usamos o método putExtra para colocar o valor e depois o recebemos na segunda interface:

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);

    }
}

Da mesma forma, objetos etc. também podem ser transmitidos, mas a classe de usuário deve ser serializada (implementa Parcelable) e, em seguida, use o método putExtra

Retorno de chamada

                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);
        }
    }

O retorno de chamada é um pouco mais problemático: primeiro, você deve usar o método startActivityForResult e substituir o método onActivityResult para obter os parâmetros de retorno de chamada.

Ciclo de vida da atividade

Também aprendi antes que o ciclo de vida onCreate onStart onResume onPause onStop onDestroy se move em ordem. Entre eles, geralmente armazenamos dados no método onDestroy e depois os restauramos no método onCreate.

O efeito de telas horizontais e verticais no ciclo de vida da atividade

A tela horizontal e vertical fará com que a Atividade seja destruída e reiniciada, o que causará algumas dificuldades no desenvolvimento.Neste momento, podemos corrigi-lo e configurá-lo:

android:configChanges="keyboardHidden|screenSize|orientation"

Acho que você gosta

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