我真的很困惑.我看过后面的按钮
我认为onPause()应该是正确的.但这是一个副作用,因为活动进入后台.我在文档中找不到任何内容.但也许我忽视了一些事情.
有人可以向我解释后退按钮应该以编程方式执行的操作吗?一些参考也很好.:-)
android button back-button activity-lifecycle android-activity
在我的简单android应用程序中,我有 2 activities。在第一个activity(主要活动)中,我重写了该ON STOP方法。但是当我执行时,会调用第二个activityon stop 方法main_Activity。为什么会出现这种情况?根据我的理解,我应该打电话Pause而不是上Stop。
我正在制作适配器以使我的书籍集合在列表视图中可见.

如果我添加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
我对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
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
我正在编写一个活动,它从服务器加载数据并使用ArrayAdapter将其显示为列表.为此,我正在显示一个进度对话框,即加载,同时它从服务器加载所有数据.然后我在处理程序中关闭对话框.我的问题是,当我改变方向时,再次显示进度对话框,这是不需要的,因为所有数据都已显示?
检测应用程序是否在前台有很多原因.例如 - 作为GCM/C2DM推送通知的触发器 - 当应用程序是前台和后台时,许多应用程序将有充分的理由实现不同的行为.其他原因可能是 - 淘汰消耗宝贵资源的服务,例如在后台任务中查询服务器.
需要明确的是:后台app的定义(我认为)是:
应用程序,它没有调用任何活动onStart()方法,也没有调用onStop()方法.那是因为活动只在那个时候在生命周期中对用户可见.
从另一方面 -
似乎Google不希望应用程序对主页按钮作出反应(它不是API的一部分)
onBackPressed()对"root/main"活动作出反应作为指示离开Activity肯定不是一个好主意(因为很多用户使用主页按钮,而不是后退按钮)
API中没有方法可以确定app是否为前景(根据我的定义..)
如果我没有错过API中的某些内容,而且确实如此 - 为什么没有原因可以轻松确定应用程序是否为前景???? !!!!
我知道我可以做的是确定应用程序是否为前景在此主题中描述 - 如何检测Android应用程序何时进入后台并返回到前台
但正如@Emil所说 - 它需要特殊许可,或者需要一些棘手的逻辑,这些逻辑很快就会成为维护的问题,并且它闻起来像是糟糕的方法(虽然这就是我现在正在做的事情,因为我没有更好的想法. ..)
我的问题基本上是:
有充分理由没有这样的API方法吗?
是否考虑应用程序是否为前景是一种不好的方法?
有没有其他方法可以知道应用程序是否是前景?
我有两个活动 - 活动A开始活动B.然后活动B从数据库加载一些东西,并可视化数据.完全初始化B中的所有内容需要一些时间(5-10秒).
我的问题是,如果我按下B中的后退按钮,它会破坏B活动(调用onDestroy)并返回活动A.我仍然想要返回活动A,但不会破坏B,因为如果我再次启动B,我必须在它做所有的事情之前再次等待(这很烦人).这有可能吗?
谢谢你的帮助!
这是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
当我打开我的应用程序时,会启动一个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()在检查之后,但在第二个活动开始之前,第一个活动仍然在屏幕上闪烁.有谁知道怎么让它不眨眼?
提前致谢.