标签: android-lifecycle

Android片段与复合控件

为什么要使用Android 3.0片段而不是复合控件?可以创建一个View继承者或复合控件一次并在任何地方使用它.

我已经阅读了http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html但未找到答案.

controls android fragment android-lifecycle android-fragments

19
推荐指数
2
解决办法
7778
查看次数

onResume()和onResumeFragments()之间的区别

FragmentActivity.onResume() 的Javadoc:

将onResume()发送到片段.请注意,为了更好地与平台的旧版本进行互操作,在此调用时,不会恢复附加到活动的片段.这意味着在某些情况下,仍可以保存先前的状态,不允许修改状态的片段事务.要正确地与处于正确状态的片段进行交互,您应该覆盖onResumeFragments().

FragmentActivity.onResumeFragments() 的Javadoc:

这是onResume()的片段定向版本,您可以覆盖它以在其片段恢复的同一点执行Activity中的操作.一定要经常打电话给超级班级.

以上是否意味着平台保证:

  • 在执行和执行时,片段永远不会被恢复(它们onResume()未被调用)FragmentActivity.onResume()
  • 片段总是onResume()在执行时恢复(被调用)FragmentActivity.onResumeFragments()

如果没有,开发商如何正确使用并对上述内容保持警惕?

android android-lifecycle android-fragments android-fragmentactivity

19
推荐指数
1
解决办法
9772
查看次数

迁移到androidx后,没有超级方法getLifecycle()

我一直在尝试迁移我的应用程序以使用androidx,但是我似乎遇到了一个奇怪的错误。从我在调用AppCompatActivity时进行扩展的活动中getLifeCycle()引发以下异常

 Caused by: java.lang.NoSuchMethodError: No super method getLifecycle()Landroidx/lifecycle/Lifecycle; in class Landroidx/core/app/ComponentActivity; or its super classes 
    at androidx.fragment.app.FragmentActivity.getLifecycle(FragmentActivity.java:324)
Run Code Online (Sandbox Code Playgroud)

我认为AppCompatActivity应该实现LifecycleOwner,但不是。难道我做错了什么?这是我的gradle依赖

implementation files("libs/jsoup-1.8.3.jar")
implementation "com.github.philjay:MPAndroidChart:v3.0.2"
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.1.0-alpha01'
implementation "androidx.constraintlayout:constraintlayout:2.0.0-alpha2"
implementation 'androidx.constraintlayout:constraintlayout-solver:2.0.0-alpha2'
implementation 'androidx.cardview:cardview:1.0.0'
implementation "com.google.firebase:firebase-messaging:17.3.4"
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.0.1'
implementation "androidx.lifecycle:lifecycle-runtime:2.0.0"

annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.0.0" // use kapt for Kotlin

implementation "de.hdodenhof:circleimageview:2.2.0"
implementation 'androidx.core:core:1.1.0-alpha01'
implementation "com.thoughtbot:expandablerecyclerview:1.0"
implementation "androidx.lifecycle:lifecycle-livedata:2.0.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:2.0.0"
implementation "com.github.franmontiel:FullScreenDialog:1.0.1"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "com.github.apl-devs:appintro:v4.2.3"
implementation "com.google.firebase:firebase-crash:16.2.1"
implementation "com.google.firebase:firebase-core:16.0.5"
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle androidx

19
推荐指数
3
解决办法
5209
查看次数

是否应该对超类方法的调用是第一个语句?

可以在该onActivityResult(int requestCode, int resultCode, Intent data)方法中读取语音识别的结果,如该示例中所示.这个方法在类中重写了相同的方法Activity:为什么对超类方法的调用不是第一个语句?

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it could have heard
        // ...
    }

    super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-activity

18
推荐指数
1
解决办法
6061
查看次数

如何在Android应用关闭/设置为后台时执行后台任务?

我的Android 4+应用程序连接到自定义Web服务,该服务用于每隔几分钟同步一次数据.为了确保在线数据始终是最新的,我想在应用程序关闭/发送到后台时触发同步.

在iOS下这很容易:

  • applicationDidEnterBackground:在AppDelegate中收听
  • 使用beginBackgroundTaskWithName:开始您长时间运行的后台任务,并避免在任务仍在运行被暂停

如何在Android上执行此操作?

第一个问题是,没有任何东西相当于applicationDidEnterBackground:.到目前为止我发现的所有解决方案都建议使用主要的Activities onPause()方法.但是,这会在主要Activity暂停时调用,这也是Activity在应用程序中启动另一个时的情况.接口的onActivityPaused()方法是正确的ActivityLifecycleCallbacks.

那么,如何检测应用程序(不只是一个Activity)是关闭还是发送到后台?

第二个问题是,我没有找到任何关于如何运行后台任务的信息.所有解决方案都指向简单的启动AsyncTask,但这真的是正确的解决方案吗?

AsyncTask将启动一项新任务,但当应用程序关闭/不活动时,此任务是否也会运行?我需要做什么,以防止应用程序和任务在几秒钟后被暂停?在应用程序完全暂停之前,如何确保任务可以完成?

android background-process android-lifecycle android-asynctask

18
推荐指数
2
解决办法
2万
查看次数

活动生命周期方法:onPostResume意义

有关活动的官方文档列出了7种生命周期方法.

onPostResume() 没有引用生命周期法.

但我觉得这种方法很重要.

在生命周期中,当一个活动从隐藏到显示状态可见时,

onRestart()
onStart()
onResume()
onPostResume()
Run Code Online (Sandbox Code Playgroud)

已被按顺序调用.

我的代码片段:

package ravindra.projects.my_app_1;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import android.widget.TextView;


public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText txtUserName;
    private EditText txtPassword;
    Button  loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Ravi","Main OnCreate");
        txtUserName=(EditText) findViewById(R.id.username);
        txtPassword=(EditText) findViewById(R.id.password);
        loginButton =  (Button)  findViewById(R.id.login);
        loginButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        Log.d("Ravi", "Login processing initiated"); …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-activity

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

android:何时使用onStart(),onStop()?

我读过几个职位描述之间的区别onStart()onResume():onStart()当活动变得可见被调用,onResume()当活动准备从用户交互调用.精细.

我一直只是添加了代码onPause()onResume(),从不与困扰onStart()onStop().

任何人都可以举一些具体的例子说明你可以做些什么onStart(),对比onResume()?这同样适用于onStop()onPause(),怎么会是onStop()有用的?我必须在这里遗漏一些基本的东西.

android android-lifecycle

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

Android上长期运行服务的最佳架构

我将非常感谢有关如何处理操作系统查杀长期服务的一些指导.

业务场景:

应用程序记录BTT轨道,可能持续数小时.它还可以在地图上显示轨道以及相关统计数据.

应用程序用户界面使用户能够开始/停止跟踪记录并在地图上查看实时跟踪.

在开始跟踪记录之后,用户可以退出应用程序并关闭屏幕(以节省电量),并且只有服务将保持运行以保持记录更新到数据库(显示通知),直到用户再次启动活动并要求停止记录,这导致服务终止.

问题:

在可变时间(从40分钟到1个半小时)之后,录制服务在没有任何警告的情况下被杀死.由于BTT出场可能需要几个小时,这导致跟踪录音不完整.

一些其他信息:

服务以启动START_STICKY并获取PARTIAL_WAKE_LOCK,并在与主活动相同的过程中运行.

以用户定义的速率从1秒到几分钟获取(并记录)新位置.我从Android文档中了解到,这是长期运行服务的预期操作系统行为.

题:

拥有性能良好的应用程序以满足业务场景要求的最佳架构设计方法是什么?

我可以想到几个选项(我不喜欢它们中的任何一个),但我希望某人如何面对并解决类似问题的指导:

  • 使用广播接收器(理想情况下,如果可能,连接到位置管理器)使服务仅在获取新位置时运行?
  • 不要让用户离开主要活动(导致用户体验下降)?
  • 如果需要,让警报广播接收器重新启动服务吗?

感谢所有能够就此主题分享一些智慧的人.

service android android-service android-lifecycle

17
推荐指数
1
解决办法
3976
查看次数

即使应用程序被销毁,AsyncTask也会一直运行?

我有一个应用程序,因为你不能做我使用的主线程上的网络操作AsyncTask,所以问题是,一旦我execute()AsyncTask右后,我finish()的活动,也许用户将finish()整个应用程序,所以我"我想知道的是:

  1. AsyncTask永远结束doInBackground()onPostExecute()即使该应用程序是只要关闭execute()了该应用程序正在运行的时候叫什么?

android android-lifecycle android-asynctask

17
推荐指数
3
解决办法
2万
查看次数

NsdManager不会停止服务发现

Android我正在开发的应用程序中,我想使用连接做零配置网络NsdManager.

我设法运行网络服务发现并连接到所需的网络,但停止发现后NsdManager线程仍在运行.这导致在几次屏幕旋转之后有许多NsdManager线程正在浏览连接的情况.

在此输入图像描述

当任何网络可用时,设备会尝试多次同步,因此NsdManager尽管停止服务发现,每个网络仍处于活动状态.

贝娄是我的代码:

package dtokarzewsk.nsdservicetest;

import android.content.Context;
import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo;
import android.util.Log;
import java.net.InetAddress;

public class NsdTest {
    private static final String NSD_SERVICE_NAME = "TestService";
    private static final String NSD_SERVICE_TYPE = "_http._tcp.";
    private int mPort;
    private InetAddress mHost;
    private Context mContext;
    private NsdManager mNsdManager;
    private android.net.nsd.NsdManager.DiscoveryListener mDiscoveryListener;
    private android.net.nsd.NsdManager.ResolveListener mResolveListener;

    public NsdTest(Context context) {
        mContext = context;
    }

    public void startListening() {
        initializeResolveListener();
        initializeDiscoveryListener();
        mNsdManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE); …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-nsd

17
推荐指数
1
解决办法
3675
查看次数