为什么要使用Android 3.0片段而不是复合控件?可以创建一个View继承者或复合控件一次并在任何地方使用它.
我已经阅读了http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html但未找到答案.
controls android fragment android-lifecycle android-fragments
FragmentActivity.onResume() 的Javadoc:
将onResume()发送到片段.请注意,为了更好地与平台的旧版本进行互操作,在此调用时,不会恢复附加到活动的片段.这意味着在某些情况下,仍可以保存先前的状态,不允许修改状态的片段事务.要正确地与处于正确状态的片段进行交互,您应该覆盖onResumeFragments().
FragmentActivity.onResumeFragments() 的Javadoc:
这是onResume()的片段定向版本,您可以覆盖它以在其片段恢复的同一点执行Activity中的操作.一定要经常打电话给超级班级.
以上是否意味着平台保证:
onResume()未被调用)FragmentActivity.onResume()onResume()在执行时恢复(被调用)FragmentActivity.onResumeFragments()?如果没有,开发商如何正确使用并对上述内容保持警惕?
android android-lifecycle android-fragments android-fragmentactivity
我一直在尝试迁移我的应用程序以使用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) 可以在该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 4+应用程序连接到自定义Web服务,该服务用于每隔几分钟同步一次数据.为了确保在线数据始终是最新的,我想在应用程序关闭/发送到后台时触发同步.
在iOS下这很容易:
applicationDidEnterBackground:在AppDelegate中收听beginBackgroundTaskWithName:开始您长时间运行的后台任务,并避免在任务仍在运行被暂停如何在Android上执行此操作?
第一个问题是,没有任何东西相当于applicationDidEnterBackground:.到目前为止我发现的所有解决方案都建议使用主要的Activities onPause()方法.但是,这会在主要Activity暂停时调用,这也是Activity在应用程序中启动另一个时的情况.接口的onActivityPaused()方法是正确的ActivityLifecycleCallbacks.
那么,如何检测应用程序(不只是一个Activity)是关闭还是发送到后台?
第二个问题是,我没有找到任何关于如何运行后台任务的信息.所有解决方案都指向简单的启动AsyncTask,但这真的是正确的解决方案吗?
AsyncTask将启动一项新任务,但当应用程序关闭/不活动时,此任务是否也会运行?我需要做什么,以防止应用程序和任务在几秒钟后被暂停?在应用程序完全暂停之前,如何确保任务可以完成?
android background-process android-lifecycle android-asynctask
有关活动的官方文档列出了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) 我读过几个职位描述之间的区别onStart()和onResume():onStart()当活动变得可见被调用,onResume()当活动准备从用户交互调用.精细.
我一直只是添加了代码onPause()和onResume(),从不与困扰onStart()和onStop().
任何人都可以举一些具体的例子说明你可以做些什么onStart(),对比onResume()?这同样适用于onStop()和onPause(),怎么会是onStop()有用的?我必须在这里遗漏一些基本的东西.
我将非常感谢有关如何处理操作系统查杀长期服务的一些指导.
业务场景:
应用程序记录BTT轨道,可能持续数小时.它还可以在地图上显示轨道以及相关统计数据.
应用程序用户界面使用户能够开始/停止跟踪记录并在地图上查看实时跟踪.
在开始跟踪记录之后,用户可以退出应用程序并关闭屏幕(以节省电量),并且只有服务将保持运行以保持记录更新到数据库(显示通知),直到用户再次启动活动并要求停止记录,这导致服务终止.
问题:
在可变时间(从40分钟到1个半小时)之后,录制服务在没有任何警告的情况下被杀死.由于BTT出场可能需要几个小时,这导致跟踪录音不完整.
一些其他信息:
服务以启动START_STICKY并获取PARTIAL_WAKE_LOCK,并在与主活动相同的过程中运行.
以用户定义的速率从1秒到几分钟获取(并记录)新位置.我从Android文档中了解到,这是长期运行服务的预期操作系统行为.
题:
拥有性能良好的应用程序以满足业务场景要求的最佳架构设计方法是什么?
我可以想到几个选项(我不喜欢它们中的任何一个),但我希望某人如何面对并解决类似问题的指导:
感谢所有能够就此主题分享一些智慧的人.
我有一个应用程序,因为你不能做我使用的主线程上的网络操作AsyncTask,所以问题是,一旦我execute()的AsyncTask右后,我finish()的活动,也许用户将finish()整个应用程序,所以我"我想知道的是:
AsyncTask永远结束doInBackground()和onPostExecute()即使该应用程序是只要关闭execute()了该应用程序正在运行的时候叫什么?在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)