Фоновая служба запускается через каждые x раз: Android [дубликат]

Вы больше не можете обращаться к некоторым компонентам непосредственно в Unity. Вы должны использовать GetComponent, чтобы получить компонент (Renderer), затем получить доступ к материалу из него.

trans.renderer.material = ....

следует изменить на

trans.GetComponent<Renderer>().material = yourNewMaterial;

Наконец, когда Cube или Quad создается в Unity, MeshRenderer автоматически привязывается к ним не Renderer. Таким образом, вы можете получить ошибку времени выполнения с помощью GetComponent<Renderer>(). Вместо этого используйте MeshRenderer.

trans.GetComponent<MeshRenderer>().material = yourNewMaterial;

Чтобы создать материал во время выполнения:

Material myNewMaterial = new Material(Shader.Find("Standard"));

В приведенном ниже примере будет создан материал, назначьте ему стандартный шейдер затем измените текстуру на текстуру из переменной myTexture, прежде чем применять ее к GameObject.

public Texture myTexture;
void Start()
{
    //Find the Standard Shader
    Material myNewMaterial = new Material(Shader.Find("Standard"));
    //Set Texture on the material
    myNewMaterial.SetTexture("_MainTex", myTexture);
    //Apply to GameObject
    trans.GetComponent<MeshRenderer>().material = myNewMaterial;
}
17
задан KULKING 11 December 2012 в 14:50
поделиться

3 ответа

Вы не хотите использовать TimerTask, так как это зависит от того, работает ли ваше приложение непрерывно. Реализация AlarmManager позволяет безопасно убивать ваше приложение между выполнением.

Утверждение, что вы пытались использовать AlarmManager, но не получило желаемого результата, не является полезным утверждением, поскольку оно сообщает никто, как помочь вам понять это правильно. Было бы гораздо полезнее выразить то, что произошло.

http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/ содержит то, что кажется полезный учебник по AlarmManager. Вот основные моменты:

1) Ваш сигнал приведет к срабатыванию Intent, когда он истечет. Вам решать, какой Intent и как он должен быть реализован. Ссылка, предоставленная мной, имеет полный пример, основанный на BroadcastReceiver.

2) Вы можете установить свой будильник с примером, например:

public void setOnetimeTimer(Context context) {
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
    intent.putExtra(ONE_TIME, Boolean.TRUE);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 5), pi);
}
23
ответ дан mah 26 August 2018 в 00:56
поделиться

Создайте объект Timer и дайте ему TimerTask, который выполняет код, который вы хотите выполнить.

Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
    @Override
    public void run () {
        // your code here...
    }
};

// schedule the task to run starting now and then every hour...
timer.schedule (hourlyTask, 0l, 1000*60*60);   // 1000*10*60 every 10 minut

Преимущество использования объекта Timer заключается в том, что он может обрабатывать несколько Объекты TimerTask, каждый со своим временем, задержкой и т. Д. Вы также можете запускать и останавливать таймеры, пока вы держите объект Timer, объявляя его как переменную класса или что-то в этом роде.

-4
ответ дан Nirav Ranpara 26 August 2018 в 00:56
поделиться

Ниже я предоставил три файла MainActivity.java для запуска службы. Второй файл MyService.java, предоставляющий службу в течение 5 минут и третьих, является файлом манифеста.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService(new Intent(this, MyService.class)); //start service which is MyService.java
    }
}

MyService.java

 public class MyService extends Service {

    public static final int notify = 300000;  //interval between two services(Here Service run every 5 Minute)
    private Handler mHandler = new Handler();   //run on another Thread to avoid crash
    private Timer mTimer = null;    //timer handling

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        if (mTimer != null) // Cancel if already existed
            mTimer.cancel();
        else
            mTimer = new Timer();   //recreate new
        mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);   //Schedule task
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mTimer.cancel();    //For Cancel Timer
        Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
    }

    //class TimeDisplay for handling task
    class TimeDisplay extends TimerTask {
        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // display toast
                    Toast.makeText(MyService.this, "Service is running", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}

AndroidManifest.xml

  <service android:name=".MyService" android:enabled="true" android:exported="true"></service>
7
ответ дан Sagar Naliyapara 26 August 2018 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: