标签: android-lifecycle

访问Broadcast Receiver中的应用程序类

我想在广播接收器中检查互联网连接; 并将结果(一个布尔标志)设置为全局变量,以便在整个应用程序中使用它,如果条件; 如果互联网断开连接,请在主活动中将状态图像视图设置为红色图像,如果已连接,则将其设置为绿色.

我跟着这个话题.但getApplication()广播接收器中没有; 而我应该使用getApplicationContext().

另一方面,这个话题:

当在广播接收器中编写代码时,它不是上下文但在其onReceive方法中给出了上下文,您只能调用getApplicationContext().这也意味着您无法保证能够在BroadcastReceiver中访问您的应用程序.

  1. 有什么顾虑?

  2. 如何在广播Receiver中访问我的应用程序类?

  3. 是否有更好的解决方案来检查互联网连接,设置全局变量和更改我的状态imageview?

android broadcastreceiver android-lifecycle android-broadcast

9
推荐指数
1
解决办法
1万
查看次数

旋转时调用DatePickerDialog onDateSet

我正在使用DialogFragment在onCreateDialog()中返回DatePickerDialog.我已将dateSetListener设置为DialogFragment(下面的示例中为"this"),除了在屏幕旋转发生时调用onDateSet()时,一切正常,这是不可取的.如何在旋转屏幕时让onDateSet不被调用?

我的DialogFragment

public static class DateDialogFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener{

    public static DateDialogFragment newInstance() {
        return new DateDialogFragment();
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new DatePickerDialog(getActivity(), this, 2012, 11, 19);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
        //This is called when screen rotated, which I dont want
        Toast.makeText(getActivity(), "Year: "+year+" Month: "+monthOfYear+" Day: "+dayOfMonth, Toast.LENGTH_SHORT).show();
    }

}
Run Code Online (Sandbox Code Playgroud)

这就是我所说的

if(getActivity()!=null){
    FragmentManager fm = getActivity().getSupportFragmentManager();
    DialogFragment newFragment = DateDialogFragment.newInstance();
    newFragment.show(fm, "dialog");
}
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments

8
推荐指数
2
解决办法
1564
查看次数

Android - 如果第一次加载Activity,则阻止onResume()函数(不使用SharedPreferences)

在我当前的应用程序中,第一次加载Activity时会触发onResume函数.我查看了Activity Lifecycle,但我没有找到防止这种情况发生的方法.

我是否可以在第一次加载Activity时阻止加载onResume()函数,而不使用SharedPreferences?

android onresume sharedpreferences android-lifecycle android-activity

8
推荐指数
1
解决办法
1万
查看次数

在Fragment的onActivityCreated()之前调用onStart()的活动

我遇到的问题onActivityCreated()是在调用activity的onStart()方法后调用我的片段方法.这似乎意味着我的活动的onCreate()方法正在完成之后onStart()?情况不是这样......可以吗?在我的活动的生命周期中,我的片段onActivityCreated()被称为?此外,如果我有多个片段,我如何控制片段onActivityCreated()调用的顺序?

在我的活动中:

@Override
protected void onStart() {
    super.onStart();
    methodA(); // this is called ...
}
Run Code Online (Sandbox Code Playgroud)

在我的片段中:

    @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    methodB(); // ... before this
}
Run Code Online (Sandbox Code Playgroud)

java android android-lifecycle android-fragments android-activity

8
推荐指数
1
解决办法
1万
查看次数

Android:finishAffinity()vs finishAndRemoveTask()

TLDR:finishAffinity()和finishAndRemoveTask()之间有什么区别?

我正在开发一个只有一个活动的Android应用程序,并使用片段切换而不是新活动.

即使在清理后台堆叠时,我也会遇到一个奇怪的问题,即通过背板生活的某个碎片.长话短说,这个片段是活的,因为我从那个片段开始了一个网络浏览器.

使用流行的按回x2在我的主要活动中退出app技术,它将使用finishAndRemove任务"退出".这将返回到某个片段,而不是完全退出.将后面的x2退出流程从finishAndRemoveTask更改为finishAffinity解决了我的问题.为什么这样做?

android android-lifecycle android-fragments

8
推荐指数
1
解决办法
8281
查看次数

LifeCycleAware片段中的片段生命周期事件

我有一个生命周期识别片段和一个LifecycleObserver

        public class MyFragment extends Fragment {
            @Override
            public void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                new MyObserver(this);

            }

            @Nullable
            @Override
            public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
                return inflater.inflate(R.layout.activity_main, container, false);
            }
        }
Run Code Online (Sandbox Code Playgroud)

以下是我的Observer类,它记录了所有片段事件

        public class MyObserver implements LifecycleObserver {
            private static final String TAG = "MyObserver";
            public MyObserver(LifecycleOwner lifecycleOwner) {
                lifecycleOwner.getLifecycle().addObserver(this);
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
            public void onCreate(){
                Log.d(TAG, "onCreate: ");
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
            public void onPause(){
                Log.d(TAG, "onPause: ");
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
            public void onDestroy(){
                Log.d(TAG, "onDestroy: …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments fragment-lifecycle

8
推荐指数
2
解决办法
3113
查看次数

LifecycleOwner: Fragment (self) 和 Fragment#viewLifecycle 的区别

使用Android XAndroid Architecture Components,即以下...

  • 导航
  • 生命周期
  • 视图模型

... 使 Android 开发变得更加容易,以获得更好、更稳定的应用程序。

当对 a使用ViewModel公开LiveDatas 时Fragment,目前有两个LifecycleOwners可用于oberve

  1. Fragment本身或
  2. Fragment的财产mViewLifecycleOwner

到目前为止,我一直并且专门将sFragment本身用于任何和所有LiveDataViewModels公开的内容。

由于我喜欢通过频繁升级到最新的 alpha 和 beta来生活在边缘,我最近升级到:

  • 导航ktx版本2.2.0-rc01
  • 活动ktx版本1.1.0-rc01
  • 片段 ktx 版本1.2.0-rc01
  • 生命周期 ktx 版本2.2.0-rc01

幸运的是,在这个日期(2019 年 11 月 1 日),所有可用的候选版本都可用

这导致在旧的 Java 代码中警告我:

在此处输入图片说明

为什么实际上有两个LifecycleOwners

在设置 Fragment …

android android-lifecycle android-fragments android-architecture-components androidx

8
推荐指数
1
解决办法
3774
查看次数

如何解决“无法访问androidx.activity.contextaware.ContextAware'”?

我正在使用 LiveData 和 viewmodels 构建一个简单的应用程序,但我在我的活动中收到以下警告消息,而不是我的活动中的一些警告

无法访问“androidx.activity.contextaware.ContextAware”,它是“com.example.movi​​es.presentation.home.MoviesActivity”的超类型。检查您的模块类路径是否缺少或冲突的依赖项

  dependencies {
    
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    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.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$life_cycle_version"

    // LiveData
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$life_cycle_version"

    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    kapt "androidx.lifecycle:lifecycle-compiler:$life_cycle_version"

    // Hilt
    implementation "com.google.dagger:hilt-android:$hilt_version"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$life_cycle_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"

    //moshi
    implementation("com.squareup.moshi:moshi:$moshi_version")
    kapt("com.squareup.moshi:moshi-kotlin-codegen:$moshi_version")

    //retrofit
    implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
    implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
    implementation("com.squareup.okhttp3:logging-interceptor:$okhttp_version")

    //espresso testing
    androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_core"
    androidTestImplementation "androidx.test:runner:$test_runner"
    androidTestImplementation "androidx.test:rules:$test_runner"

    // Hilt For instrumentation tests
    androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_testing"
    androidTestAnnotationProcessor "com.google.dagger:hilt-compiler:$hilt_testing"

    //Hilt For local unit tests
    testImplementation "com.google.dagger:hilt-android-testing:$hilt_testing"
    testAnnotationProcessor "com.google.dagger:hilt-compiler:$hilt_testing"

    //mockk …
Run Code Online (Sandbox Code Playgroud)

android gradle android-lifecycle android-studio android-livedata

8
推荐指数
1
解决办法
1958
查看次数

如何绑定ViewModel生命周期来撰写

我现在正在使用 Jetpack Compose。我意识到我可以在可组合项中使用 ViewModel 并在可组合项中初始化视图模型,如下所示:

val myViewModel:MyViewModel = viewModel()
Run Code Online (Sandbox Code Playgroud)

但存在一个问题,即使未显示可组合项,这些视图模型也永远不会被销毁。

例如,我有一个主可组合屏幕,它根据用户交互加载一些其他屏幕,如下所示:

@Composable
fun MainAuthentication(viewModel: MainViewModel) {
    val state = viewModel.state.value
    val scope = rememberCoroutineScope()
    val scaffoldState = rememberScaffoldState()
    Scaffold(scaffoldState = scaffoldState)
    {

        //--------------------(login and sign up button)--------------------//
        Row(
            modifier = Modifier
                .padding(top = 50.dp)
                .fillMaxSize(),
            verticalAlignment = Alignment.CenterVertically,
        ) {
            if (!state.signUpFormIsVisible && !state.loginFormIsVisible) {
                Button(
                    onClick = {
                        viewModel.onEvent(event = MainEvent.LoginButtonClick)
                    },
                    modifier = Modifier
                        .padding(10.dp)
                        .weight(0.5f)
                ) {
                    Text(text = stringResource(id = R.string.login))
                }

                Button(
                    onClick = { …
Run Code Online (Sandbox Code Playgroud)

viewmodel android-lifecycle kotlin android-jetpack-compose

8
推荐指数
1
解决办法
6019
查看次数

Android 处理 Jetpack Compose 屏幕上的生命周期事件

在 Jetpack Compose 中,所有屏幕都是可组合功能。FragmentsJetpack Compose 中未使用。

我们如何使用 Jetpack Compose 处理生命周期事件?如果我们使用 Fragment,我们可以处理生命周期事件 ( onStart/onPause/onResume/onStop)。这些对于释放资源、停止观察更改等不同场景很有用。

在 Jetpack Compose 中,如果我需要处理这些事件,我该如何在可组合屏幕中处理这些事件?

请帮助我提供一些想法或资源,以便我能够理解这一点。

提前致谢。

android android-lifecycle android-jetpack android-jetpack-compose

8
推荐指数
1
解决办法
7875
查看次数