栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android lifecycle使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android lifecycle使用

1、使用Lifecycle解藕页面和组件,直接看activity代码 

这是没有使用lifecycle写的代码 

package com.nyw.lifecycledemo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;


public class MainActivity extends AppCompatActivity {
    private Chronometer ct_text_time;
    private long elapsedTime;
    private Button btn_LifeCycle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        ct_text_time=findViewById(R.id.ct_text_time);
        findViewById(R.id.btn_LifeCycle).setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View v) {
                //打开 新的页面测试 Lifecycle解藕,在做一些业务需要在activity生命周期里执行的业务,现在不需要把代码写到activity都可以在生命周期执行
                Intent intent=new Intent(MainActivity.this,LifecycleTestView.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        //获取现在时间减暂停使用时间回到上次使用时间
        ct_text_time.setbase(SystemClock.elapsedRealtime()-elapsedTime);
        ct_text_time.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //获取系统时间减上次使用时间
        elapsedTime=SystemClock.elapsedRealtime()-ct_text_time.getbase();
        ct_text_time.stop();
    }
}



    
        
        

使用 Lifecycle实现的代码 

自定义一个Chronometer

package com.nyw.lifecycledemo;

import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

public class MyChronomcler  extends Chronometer implements LifecycleObserver {
    private long elapsedTime;

    public MyChronomcler(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    //添加注解实现生命周期方法
    @onLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private void startMeter(){
        //获取现在时间减暂停使用时间回到上次使用时间
        setbase(SystemClock.elapsedRealtime()-elapsedTime);
        start();
    }
    //添加注解实现生命周期方法
    @onLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private void stopMeter(){
        //获取系统时间减上次使用时间
        elapsedTime=SystemClock.elapsedRealtime()-getbase();
        stop();
    }
}
package com.nyw.lifecycledemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;


public class LifecycleTestView extends AppCompatActivity {
   private MyChronomcler chronomcler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle_test_view);
        chronomcler=findViewById(R.id.chronomcler);
        //Lifecycle 监听设置
        getLifecycle().addObserver(chronomcler);

    }
}
activity_lifecycle_test_view.xml


    

2、 Lifecycle解藕Service与组件

使用前在build.gradle必须引入如下

implementation "android.arch.lifecycle:extensions:1.0.0-alpha4"

plugins {
    id 'com.android.application'
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.nyw.lifecycledemo"
        minSdk 21
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    //lifecycle
    implementation "android.arch.lifecycle:extensions:1.0.0-alpha4"
}

activity代码 

package com.nyw.lifecycledemo.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.nyw.lifecycledemo.R;
import com.nyw.lifecycledemo.service.MyLocationService;


public class LifeCycleServiceAndView extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_life_cycle_service_and_view);
    }

    public void stopGPS(View view) {
        stopService(new Intent(this, MyLocationService.class));
    }

    public void startGPS(View view) {
        startService(new Intent(this, MyLocationService.class));
    }
}

xml代码




    

 服务代码

package com.nyw.lifecycledemo.service;

import android.app.Service;
import android.util.Log;

import androidx.lifecycle.LifecycleService;

public class MyLocationService extends LifecycleService {
    public MyLocationService(){
        Log.i("ndfsksfjskf","MyLocationService");
        MyLocationObserver myLocationObserver=new MyLocationObserver(this);
        getLifecycle().addObserver(myLocationObserver);
    }
}

代码

package com.nyw.lifecycledemo.service;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

import java.util.List;

public class MyLocationObserver implements LifecycleObserver {
    private Context context;
    private LocationManager locationManager;
    private MyLocationListener myLocationListener;

    public MyLocationObserver(Context context) {
        this.context = context;
    }

    //Lifecycle是通过注解方式实现生命周期方法
    @onLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void startGetLocation() {
        Log.i("dsflfjksfksfs","startGetLocation");
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        myLocationListener = new MyLocationListener();
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            return;
        }
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 1, myLocationListener);

    }
    @onLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void stopGetLocation(){
        Log.i("dsflfjksfksfs","stopGetLocation");
        locationManager.removeUpdates(myLocationListener);
    }

    static class MyLocationListener implements LocationListener{

        @Override
        public void onLocationChanged(@NonNull Location location) {
            Log.i("dsflfjksfksfs","location changed"+location.toString());
        }

        @Override
        public void onLocationChanged(@NonNull List locations) {

        }

        @Override
        public void onFlushComplete(int requestCode) {

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(@NonNull String provider) {

        }

        @Override
        public void onProviderDisabled(@NonNull String provider) {

        }
    }


}

AndroidManifest.xml




    
    
    
        
        
        
            
                

                
            
        

        
    

 activity 代码中要添加动态授权

 private void authorization() {
        //判断权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            //请求权限
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, MY_PERMISSION_REQUEST_CODE);
        }else {
            //6.0系统以下业务操作
        }
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case MY_PERMISSION_REQUEST_CODE:

                boolean isAllGranted = true;

                // 判断是否所有的权限都已经授予了
                for (int grant : grantResults) {
                    if (grant != PackageManager.PERMISSION_GRANTED) {
                        isAllGranted = false;
                        break;
                    }
                }
                //做业务处理或提醒用户开启权限
                if (isAllGranted) {
                    // 如果所有的权限都授予了, 则执行业务处理代码

                } else {
                    // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
                    Toast.makeText(getApplicationContext(), "获取权限失败,可能部分功能无法正常使用,请到应用权限管理中手动打开权限按钮", Toast.LENGTH_SHORT).show();
                }


        }

    }

3、使用ProcessLifecycleOwner监听程序的生命周期

package com.nyw.lifecycledemo;

import android.app.Application;

import androidx.lifecycle.ProcessLifecycleOwner;


public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
    }
}
package com.nyw.lifecycledemo;

import android.util.Log;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;


public class ApplicationObserver implements LifecycleObserver {

    @onLifecycleEvent(Lifecycle.Event.ON_CREATE)
    private void onCreate(){
        //只会被调用一次
        Log.i("sdfksjfdksfsjfd","Lifecycle.Event.ON_CREATE");
    }
    @onLifecycleEvent(Lifecycle.Event.ON_START)
    private void onStart(){
        Log.i("sdfksjfdksfsjfd","Lifecycle.Event.ON_START");
    }
    @onLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private void onResume(){
        Log.i("sdfksjfdksfsjfd","Lifecycle.Event.ON_START");
    }
    @onLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private void onPause(){
        Log.i("sdfksjfdksfsjfd","Lifecycle.Event.ON_PAUSE");
    }
    @onLifecycleEvent(Lifecycle.Event.ON_STOP)
    private void onstop(){
        Log.i("sdfksjfdksfsjfd","Lifecycle.Event.ON_STOP");
    }
    @onLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    private void onDestroy(){
        //不会被调用
        Log.i("sdfksjfdksfsjfd","Lifecycle.Event.ON_DESTROY");
    }
}

最后记得在AndroidManifest.xml添加

android:name=".MyApplication"



    
    
    
        
        
        
            
                

                
            
        

        
    

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号