标签: activity-lifecycle

Android上的后退按钮/后退键会触发哪些操作?

我真的很困惑.我看过后面的按钮

我认为onPause()应该是正确的.但这是一个副作用,因为活动进入后台.我在文档中找不到任何内容.但也许我忽视了一些事情.

有人可以向我解释后退按钮应该以编程方式执行的操作吗?一些参考也很好.:-)

android button back-button activity-lifecycle android-activity

4
推荐指数
1
解决办法
8063
查看次数

当 onStop 实际被调用时

在我的简单android应用程序中,我有 2 activities。在第一个activity(主要活动)中,我重写了该ON STOP方法。但是当我执行时,会调用第二个activityon stop 方法main_Activity。为什么会出现这种情况?根据我的理解,我应该打电话Pause而不是上Stop

android activity-lifecycle android-activity

4
推荐指数
1
解决办法
4786
查看次数

android - ArrayAdapter没有默认构造函数

我正在制作适配器以使我的书籍集合在列表视图中可见.

KK

如果我添加super(context,position),问题就解决了:

    public BookAdapter(Context context, int position, List <Book> updatedBooksList) {
    super(context, position);
    this.context = context;
    this.booksList = updatedBooksList ;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道为什么我需要这个参数(int position)并调用超类构造函数?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)

另外,从广义上讲,为什么我们总是(?)需要在每个onCreate中调用super.onCreate?

我们不应该覆盖我们所有的活动生命周期阶段 - onPause,onREsume,onStop,OnDestroy,但我们仍然需要在每个阶段调用super?

android oncreate activity-lifecycle android-lifecycle onpause

4
推荐指数
1
解决办法
7552
查看次数

如果我们在override函数中的super()函数之前或之后写,那么代码的影响是什么

我对super()覆盖函数中的函数调用感到困惑.

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}
Run Code Online (Sandbox Code Playgroud)

是的代码的影响,之前或之后写什么super.onDestroy()super.onPause()或其他超级功能在所有类型的android系统中被覆盖的方法呢?

android activity-lifecycle ondestroy onpause android-activity

4
推荐指数
1
解决办法
856
查看次数

如何在 Android 上使用协程进行不间断取消,包括根据生命周期自动取消?

背景

AsyncTask我在从简单(已弃用)迁移到Android 时Executors遇到问题Kotlin Coroutines

问题

我无法找到如何执行我可以在AsyncTask甚至Executors使用上完成的基本操作Kotlin Coroutines

过去,我可以选择在有或没有线程中断的情况下取消任务。现在,出于某种原因,考虑到我在协程上创建的任务,它只是不间断的,这意味着如果我运行一些甚至在其中“睡眠”的代码(并不总是由我执行),它就不会被中断。

我还记得有人告诉我,协程在 Android 上非常好用,因为如果你在 Activity 中,它会自动取消所有任务。但我找不到如何做到这一点的解释。

我尝试过并发现了什么

对于协程任务(Deferred根据我所看到的调用),我想我已经读到,当我创建它时,我必须选择它将支持哪种取消,并且由于某种原因我不能同时拥有它们。不确定这是否属实,但我仍然想知道,因为我想同时拥有两者以获得最佳迁移。我曾经使用 AsyncTask 将它们添加到一个集合中(并在取消时将其删除),以便在 Activity 完成后,我可以查看所有内容并取消它们。我什至为我开设了一个很好的课程。

这是我为了测试这个而创建的:

class MainActivity : AppCompatActivity() {
    val uiScope = CoroutineScope(Dispatchers.Main)
    val bgDispatcher: CoroutineDispatcher = Dispatchers.IO

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadData()
    }

    private fun loadData(): Job = uiScope.launch {
        Log.d("AppLog", "loadData")
        val task = async(bgDispatcher) {
            Log.d("AppLog", "bg start")
            try {
                Thread.sleep(5000L) //this could be any executing …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-lifecycle android-asynctask kotlin-coroutines

4
推荐指数
2
解决办法
4439
查看次数

如何在方向更改时处理活动?

我正在编写一个活动,它从服务器加载数据并使用ArrayAdapter将其显示为列表.为此,我正在显示一个进度对话框,即加载,同时它从服务器加载所有数据.然后我在处理程序中关闭对话框.我的问题是,当我改变方向时,再次显示进度对话框,这是不需要的,因为所有数据都已显示?

android progressdialog activity-lifecycle

3
推荐指数
1
解决办法
1028
查看次数

确定前台的应用程序是否是不受欢迎的?

检测应用程序是否在前台有很多原因.例如 - 作为GCM/C2DM推送通知的触发器 - 当应用程序是前台和后台时,许多应用程序将有充分的理由实现不同的行为.其他原因可能是 - 淘汰消耗宝贵资源的服务,例如在后台任务中查询服务器.

需要明确的是:后台app的定义(我认为)是:
应用程序,它没有调用任何活动onStart()方法,也没有调用onStop()方法.那是因为活动只在那个时候在生命周期中对用户可见.

从另一方面 -

  • 似乎Google不希望应用程序对主页按钮作出反应(它不是API的一部分)

  • onBackPressed()对"root/main"活动作出反应作为指示离开Activity肯定不是一个好主意(因为很多用户使用主页按钮,而不是后退按钮)

  • API中没有方法可以确定app是否为前景(根据我的定义..)

如果我没有错过API中的某些内容,而且确实如此 - 为什么没有原因可以轻松确定应用程序是否为前景???? !!!!

我知道我可以做的是确定应用程序是否为前景在此主题中描述 - 如何检测Android应用程序何时进入后台并返回到前台

但正如@Emil所说 - 它需要特殊许可,或者需要一些棘手的逻辑,这些逻辑很快就会成为维护的问题,并且它闻起来像是糟糕的方法(虽然这就是我现在正在做的事情,因为我没有更好的想法. ..)

我的问题基本上是:

  • 有充分理由没有这样的API方法吗?

  • 是否考虑应用程序是否为前景是一种不好的方法?

  • 有没有其他方法可以知道应用程序是否是前景?

android application-lifecycle activity-lifecycle

3
推荐指数
1
解决办法
1827
查看次数

onBackPressed - 避免破坏活动

我有两个活动 - 活动A开始活动B.然后活动B从数据库加载一些东西,并可视化数据.完全初始化B中的所有内容需要一些时间(5-10秒).

我的问题是,如果我按下B中的后退按钮,它会破坏B活动(调用onDestroy)并返回活动A.我仍然想要返回活动A,但不会破坏B,因为如果我再次启动B,我必须在它做所有的事情之前再次等待(这很烦人).这有可能吗?

谢谢你的帮助!

android activity-lifecycle android-activity

3
推荐指数
1
解决办法
1173
查看次数

Android Lollipop在完成后调用onCreate()

这是Android Lollipop 5.0的一个奇怪的行为.我有两个活动,A和B. A启动活动B.当我点击后退按钮时,在活动B中,Android在A上调用onCreate方法.此行为仅在Lollipop 5.0中可观察到.在其他版本中,onCreate在完成另一个活动后从未被调用.

问题是什么?

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.example"
android:versionCode="1"
android:versionName="1" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="21" />

<application
    android:name=".Application"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppThemeMaterial" >
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity
        android:name=".activities.ActivityA"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".activities.ActivityB"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/activityB" >
    </activity>
</application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-activity android-5.0-lollipop

3
推荐指数
1
解决办法
2488
查看次数

调用finish()后活动布局闪烁

当我打开我的应用程序时,会启动一个Activity,并且在其onCreate方法中我正在检查某些条件.如果条件为真,我完成当前活动并打开另一个活动.问题是:第一个活动在屏幕上闪烁,然后第二个活动打开.代码如下:

public class FirstActivity extends Activity {
    @Override
    protected final void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //some code here...
        checkSomeStuff();
        setContentView(R.layout.my_layout);
        //some code here...
    }
    private void checkSomeStuff() {
        if (/*some condition*/) {
            final Intent intent = new Intent(this, SecondActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            finish();
            startActivity(intent);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,setContentView()在检查之后,但在第二个活动开始之前,第一个活动仍然在屏幕上闪烁.有谁知道怎么让它不眨眼?

提前致谢.

android activity-lifecycle android-activity

3
推荐指数
1
解决办法
5228
查看次数