如何从扩展 JobService 的类中调用将视图作为参数的 MainActivity 方法?

Posted

技术标签:

【中文标题】如何从扩展 JobService 的类中调用将视图作为参数的 MainActivity 方法?【英文标题】:How to call a method from MainActivity which takes views as parameters, from a class which extends JobService? 【发布时间】:2020-03-22 21:40:43 【问题描述】:

我想执行 MainActivity 中的这个方法...

public void checkNow(View view) 
        new Thread(() -> 

            //codes...

            EditText getSite = findViewById(R.id.site);
            site = getSite.getText().toString();

            //codes...

            Toast.makeText(this, "Connecting...", Toast.LENGTH_SHORT).show();

            new MovieAsyncTask().execute(movie, url, site);

        ).run();
    

...来自以下课程

public class MovieUpdatesService extends JobService 

    private static final String TAG = "MovieUpdatesService";
    private boolean jobCancelled = false;

    @Override
    public boolean onStartJob(JobParameters params) 
        Log.d(TAG, "Job started");
        doBackgroundWork(params);
        return true;
    

    public void doBackgroundWork(final JobParameters params) 
        if (jobCancelled)
            return;

        //call checkNow() method here

        Log.d(TAG, "Job finished");
        jobFinished(params, false);
    

    @Override
    public boolean onStopJob(JobParameters params) 
        Log.d(TAG, "Job cancelled before completion");
        jobCancelled = true;
        return true;
    


我想致电checkNow(View view),但我不知道如何从此类访问这些视图。 我尝试使用interface,但我不明白如何使它适用于我的情况。 我是 android 新手,所以如果可能的话,我正在寻找一个简单的解决方案

【问题讨论】:

为了更好地理解您的问题,您想从服务本身获取视图 (textview) 及其内容吗? @tomerpacific 我想从服务类调用checkNow(View view),但我不知道如何访问这些视图 我不会从服务访问视图。由于视图与活动有关,我会将它们留在那里。从服务中调用它们的触发器是什么?您是否考虑过只更新服务的成员变量? @tomerpacific 我该怎么做? 我的回答对你有帮助吗? 【参考方案1】:

要让您的服务保存文本视图的值,您可以添加一个成员变量。然后你可以为这个字符串公开一个 setter 方法。

public class MovieUpdatesService extends JobService 

private static final String TAG = "MovieUpdatesService";
private boolean jobCancelled = false;
private String siteDetails = "";  <----

//Use this method from the Activity
public void setSiteDetails(String _siteDetails) 
  siteDetails = _siteDetails


@Override
public boolean onStartJob(JobParameters params) 
    Log.d(TAG, "Job started");
    doBackgroundWork(params);
    return true;


public void doBackgroundWork(final JobParameters params) 
    if (jobCancelled)
        return;

    //use siteDetails here

    Log.d(TAG, "Job finished");
    jobFinished(params, false);


@Override
public boolean onStopJob(JobParameters params) 
    Log.d(TAG, "Job cancelled before completion");
    jobCancelled = true;
    return true;
  

【讨论】:

抱歉回复晚了。我在这个网站上不活跃。我没有完全使用您的答案,但它让我想到了将方法分成几部分并解决问题。那谢谢啦! :)

以上是关于如何从扩展 JobService 的类中调用将视图作为参数的 MainActivity 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何调用从 NSObject 类添加视图

如何从自定义视图的类中更改文本视图

如何从在android中扩展应用程序的类中显示对话框?

如何在 ViewModel 类中调用 TranslateTo?

C ++如何从包含的类中调用父类方法?

如何从具有相同简单名称的类中查找某个方法?